C++ 对象的隐式变换
C++ 对象的隐式转换。
我用Visual Studio 2008编写如如下代码:
相关代码与执行结果的对应关系如下:
Human a(26); // 构造函数被执行
a.Print(); // 26 183
a = 27; // 构造函数被执行 析构函数被执行,相当于a = Human(27),但是没有调用复制构造函数,为什么?
a.Print(); // 27 183
return 0; // 析构函数被执行,对象a被析构掉
我的问题是红颜色的文字部分,谢谢。
------解决方案--------------------
除了拷贝构造函数,还有'='可以赋值,你重载一下等号就能看到了。
------解决方案--------------------
初始化的时候,或者显示调用,才会调用复制构造函数
我用Visual Studio 2008编写如如下代码:
#include <iostream>
using namespace std;
class Human
{
public:
Human(int nAge)
{
m_nAge = nAge;
m_nHeight = 183;
cout << "构造函数被执行" << endl;
}
Human(Human& man)
{
m_nAge = man.m_nAge;
m_nHeight = man.m_nHeight;
cout << "复制构造函数被执行" << endl;
}
~Human()
{
cout << "析构函数被执行" << endl;
}
void Print()
{
cout << m_nAge << "\t" << m_nHeight << endl;
}
private:
int m_nAge;
int m_nHeight;
};
int main()
{
Human a(26);
a.Print();
a = 27;
a.Print();
return 0;
}
相关代码与执行结果的对应关系如下:
Human a(26); // 构造函数被执行
a.Print(); // 26 183
a = 27; // 构造函数被执行 析构函数被执行,相当于a = Human(27),但是没有调用复制构造函数,为什么?
a.Print(); // 27 183
return 0; // 析构函数被执行,对象a被析构掉
我的问题是红颜色的文字部分,谢谢。
------解决方案--------------------
除了拷贝构造函数,还有'='可以赋值,你重载一下等号就能看到了。
------解决方案--------------------
初始化的时候,或者显示调用,才会调用复制构造函数
Foo f1; // 无参数的构造函数
Foo f2(f1); // 复制构造函数
Foo f3 = f2; // 复制构造函数
f3 = f1; // 赋值操作符