首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个C++的析构函数的有关问题,分析一下运行结果的原因

2012-04-16 
一个C++的析构函数的问题,分析一下运行结果的原因class complex{private:double xdouble ypublic:comple

一个C++的析构函数的问题,分析一下运行结果的原因
class complex
{
private:
double x;
double y;
public:
  complex operator+(complex &comp1);
  ~complex(void)
  {
cout<<"析构函数"<<endl;
  }
  complex(double a,double b)
{
x = a;
y = b;
}
};
主函数中:
  complex a;
complex b;
complex c;
a.get("1+5i");
b.get("3-2i");
c=a+b;
c.show();
return 0;运行结果:析构函数析构函数4+3i析构函数析构函数析构函数

[解决办法]
楼主给出的代码显然不全。

如果operator+按照正常的实现,应该不会输出5个“析构函数”的,应该是输出4个析构函数,即形如:

C/C++ code
析构函数     // 销毁c = a + b中,a + b所产生的临时对象4+3i         // 输出结果析构函数     // 销毁c析构函数     // 销毁b析构函数     // 销毁a
[解决办法]
operator+返回的是类,必定是一个局部类变量,所以也要打印一次析构
[解决办法]
探讨

operator+返回的是类,必定是一个局部类变量,所以也要打印一次析构

[解决办法]
4+3i之前的两次”析构函数“是正确的
因为是对象返回的,在函数operator+(complex &comp1)中的对象返回赋值给临时对象时,本身已析构,在临时对象赋值给c后,又一次析构,
接下来才是,a,b,c先后析构
总共5次析构

[解决办法]
补全的代码
C/C++ code
#include <iostream>#include <string>using namespace std;class complex{private:    double x;    double y;    string m_str;public:    complex  operator+(complex &comp1)    {        m_str += " "+ comp1.m_str;        return *this;    }    complex (void){}    ~complex(void)    {        cout<<"析构函数"<<endl;    }    complex(double a,double b)    {        x = a;        y = b;    }    void get(string str)    {        m_str = str;    }    void show()    {        cout<<m_str<<endl;    }    };int main(void){    complex a;    complex b;    complex c;    a.get("1+5i");    b.get("3-2i");    c=a+b;    c.show();    return 0;}//析构函数 析构函数 4+3i 析构函数 析构函数 析构函数 

热点排行