#include <iostream>
using namespace std;
class Complex
{
private:
int x;
int y;
public:
Complex();
Complex(int x,int y);
Complex(const Complex& complex);
~Complex();
void display() const;
};
Complex::Complex()
{
cout<<"Complex()"<<endl;
}
Complex::Complex(int x,int y)
{
cout<<"Complex(int x,int y)"<<endl;
this->x=x;
this->y=y;
}
Complex::Complex(const Complex& complex)
{
this->x=complex.x;
this->y=complex.y;
//Complex(complex.x,complex.y);以上两句为什么不能用左边的那个代替
//就是调用构造函数Complex(int x,int y)
cout<<"Complex(int x,int y)"<<endl;
}
Complex::~Complex()
{
cout<<"~Complex()"<<endl;
}
void Complex::display() const
{
cout<<"x="<<x<<endl<<"y="<<y<<endl;
}
int main()
{
Complex c=Complex(1,2);
c.display();
Complex c2(c);
c2.display();
return 0;
}
请看看注释那里
Complex::Complex(const Complex& complex)
{
this->x=complex.x;
this->y=complex.y;
//Complex(complex.x,complex.y);以上两句为什么不能用左边的那个代替
//就是调用构造函数Complex(int x,int y)
cout<<"Complex(int x,int y)"<<endl;
}
要是我在复制构造函数里面调用
Complex(complex.x,complex.y);那个x,y的值没有赋值成功.
为什么呢?
构造函数具有特殊性,不要当作普通函数使用。
构造函数嵌套调用的唯一可行方法是使用placement new,e.g. new (this)Complex(complex.x,complex.y);
但是个人认为这不是好的编程风格,不建议使用。
如果构造函数实现复杂,建议把实现抽离出来作为一个独立的内部Initial方法,重载的构造函数调用Initial
谢谢,原来这么复杂的,都是书上没有的知识.
现在看书打代码才知道有这么多困难,之前以为看懂就行,现在自己盲打确实不容易
构造函数具有特殊性,不要当作普通函数使用。
构造函数嵌套调用的唯一可行方法是使用placement new,e.g. new (this)Complex(complex.x,complex.y);
但是个人认为这不是好的编程风格,不建议使用。
如果构造函数实现复杂,建议把实现抽离出来作为一个独立的内部Initial方法,重载的构造函数调用Initial