c++的析构问题

来源:百度知道 编辑:UC知道 时间:2024/09/22 16:50:27
代码:
#include <iostream>
using namespace std;

/*-----对于类体的定义-----*/
class Complex
{
public :
Complex();
Complex(double,double);
Complex operator + (Complex &);
~Complex();
void Display();
private :
double real;
double imag;
};

/*-----Complex类中的方法的实现-----*/
//重载的构造方法的定义
Complex::Complex()
{
//real = 0;
//imag = 0;
Complex(0,0);
}
Complex::Complex(double a,double b)
{
real = a;
imag = b;
}
//析构函数的定义
Complex::~Complex()
{
Display();
cout <<"已经被释放!" <<endl;
}
//重载的运算符+的定义
Complex Complex::operator + (Complex &c2)
{
Complex c3;
c3.real = real + c2.real;
c3.imag = imag + c2.imag;
return c3;
}
//显示函数的定义
void Complex::Display()
{
cout <<real <<"+" <<imag <<"i" <<

Complex::Complex()
{
//real = 0;
//imag = 0;
Complex(0,0);//这儿生成一个临时对象,Complex执行完之后,临时对象释放,就出现那个结果了
}

//如果你想把它的成员初始化为0用下面代码就OK了,而不是调用另外一个构造函数
Complex::Complex()
:real(0),imag(0)
{
//real = 0;
//imag = 0;;
}

Complex c3; //在构造函数中调用了一次Complex(0, 0)生成了一个临时对象,并在c3构造完成之后构造掉了该临时对象
c3 = c1 + c2;//

Complex Complex::operator + (Complex &c2)
{
Complex c3; //同上面的理由,会生成一个临时对象并析构掉
c3.real = real + c2.real;
c3.imag = imag + c2.imag;
return c3;
}