[C++]为什么构造函数不能调用构造函数

#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)
{

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;
}

看到注释那里,这样子调用构造函数是不行的,为什么不行呢?我自己还不清楚,可以看http://www.cnblogs.com/chio/archive/2007/10/20/931043.html

以及http://www.cnblogs.com/lidan/archive/2011/08/10/2239488.html

后来 胡屯 教会我

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

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

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

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

所以程序修改如下

class Complex
{
private:
int x;
int y;
void Initial(int x,int y);
public:
Complex();
Complex(int x,int y);
Complex(const Complex& complex);
~Complex();
void display() const;

};
void Complex::Initial(int x,int y)
{
this->x=x;
this->y=y;
}
Complex::Complex()
{
cout<<"Complex()"<<endl;
}
Complex::Complex(int x,int y)
{
cout<<"Complex(int x,int y)"<<endl;
Initial(x,y);
}
Complex::Complex(const Complex& complex)
{
Initial(complex.x,complex.y);
cout<<"Complex(int x,int y)"<<endl;
}
Complex::~Complex()
{
cout<<"~Complex()"<<endl;
}
void Complex::display() const
{
cout<<"x="<<x<<endl<<"y="<<y<<endl;
}

这样子构造函数调用普通成员函数就可以了,而且重复代码也少了,容易修改

你可能感兴趣的:(构造函数)