类构造函数如何在C+中工作+; 我看到了关于构造函数的在线C++测试。我能找出大部分答案,但对下面的一些问题感到困惑。希望有人能帮我
下面是一个例子类构造函数如何在C+中工作+; 我看到了关于构造函数的在线C++测试。我能找出大部分答案,但对下面的一些问题感到困惑。希望有人能帮我,c++,C++,下面是一个例子 #include <iostream> class A { public: A(int n = 0) : m_n(n) { std::cout << 'd'; } A(const A& a) : m_n(a.m_n) { std::cout << 'c';
#include <iostream>
class A {
public:
A(int n = 0) : m_n(n) {
std::cout << 'd';
}
A(const A& a) : m_n(a.m_n) {
std::cout << 'c';
}
private:
int m_n;
};
void f(const A &a1, const A &a2 = A())
{
}
int main() {
A a(2), b;
const A c(a), &d = c, e = b;
b = d;
A *p = new A(c), *q = &a;
static_cast<void>(q);
delete p;
f(3);
std::cout << std::endl;
return 0;
}
#包括
甲级{
公众:
A(int n=0):m_n(n){
std::cout这些没有输出,因为d
和q
不是A
类型,即它们不是A
对象。d
是对A
的引用,q
是指向A
的指针。初始化引用并初始化或分配指针不会操纵引用rred指向/指向一个
对象,因此没有输出
为了解决您的问题-没有什么可以“使其工作”,它的工作原理与它应该的一样。
&d=c
不会输出任何内容,因为您没有调用构造函数
如果我们稍微扩展一下代码片段
A &d = c
代码所说的是“将d
声明为对类型为a的对象的引用,该对象指向c
”。因为您正在创建引用,所以您没有调用构造函数,c
和d
是同一个对象
这同样适用于
q
,但不是创建引用,而是创建一个指针并为其分配a
类型的现有实例的地址。不会调用构造函数,因为您没有创建单独的对象,而是链接到现有的对象。更清楚地说,我将重写此语句
const A c(a), &d = c, e = b;
作为
这里,d被声明为对a类型对象的引用。它不创建新对象。它引用的是已创建的对象。在这种情况下,d引用的是c。事实上,d只是对象c的别名
此代码段
A *p = new A(c), *q = &a;
为了简单起见,也可以重写
A *q = &a;
在此语句中,指针q仅由a的地址分配。未创建任何对象。现在,指针q指向已创建的早期对象a。谢谢。立即清除。:-)
A *q = &a;