首页 新闻 会员 周边 捐助

为什么调用构造函数失败了?

0
[已解决问题] 解决于 2011-12-30 17:58
#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的值没有赋值成功.
为什么呢?
林羽飞扬的主页 林羽飞扬 | 初学一级 | 园豆:193
提问于:2011-12-30 16:39
< >
分享
最佳答案
1

构造函数具有特殊性,不要当作普通函数使用。

构造函数嵌套调用的唯一可行方法是使用placement new,e.g. new (this)Complex(complex.x,complex.y);

但是个人认为这不是好的编程风格,不建议使用。

如果构造函数实现复杂,建议把实现抽离出来作为一个独立的内部Initial方法,重载的构造函数调用Initial

胡屯 | 小虾三级 |园豆:714 | 2011-12-30 17:00

谢谢,原来这么复杂的,都是书上没有的知识.

现在看书打代码才知道有这么多困难,之前以为看懂就行,现在自己盲打确实不容易

林羽飞扬 | 园豆:193 (初学一级) | 2011-12-30 17:57
其他回答(1)
0

构造函数具有特殊性,不要当作普通函数使用。

构造函数嵌套调用的唯一可行方法是使用placement new,e.g. new (this)Complex(complex.x,complex.y);

但是个人认为这不是好的编程风格,不建议使用。

如果构造函数实现复杂,建议把实现抽离出来作为一个独立的内部Initial方法,重载的构造函数调用Initial

Rollen Holt | 园豆:210 (菜鸟二级) | 2012-03-21 16:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册