重载减法运算符cpp

时间:2018-11-14 11:52:23

标签: c++

我对c ++中的面向对象编程有点陌生,我一直在尝试为我创建的Complex类重载c ++中的subtraction(-)运算符。除我的程序异常终止外,一切正常。
以下是我一直在尝试的操作:

#include<iostream>
#include<cstdlib>
class Complex{
    //Data-members
private:
    int re, im;

    //methods
public:
    //Constructor
    Complex(){ /*default Constructor*/ }
    Complex(const int& re_, const int& im_):re(re_), im(im_){}
    //Subtraction(-) operator overloading
    Complex operator-(const Complex& op)
    {
        Complex res(this->re - op.re, this->im - op.im);
        return res;
    }
    //get-set methods for re
    int getReal(){ return re; }
    void setReal(const int& re){ this->re = re; }
    //get-set methods for im
    int getImaginary(){ return im; }
    void setImaginary(const int& im){ this->im = im; }
    //Destructor
    ~Complex(){ free(this); }
};

int main()
{
    Complex a(2, 3), b(3, 5);
    Complex d = a - b;
    std::cout<<"d.re = "<<d.getReal()<<" d.im = "<<d.getImaginary()<<"\n";
    return 0;
}

任何人都可以解释错误原因。

1 个答案:

答案 0 :(得分:4)

永远不要做free(this),至少要在析构函数中做。通过编译器生成的代码或由用户执行deletedelete[],用户可以在析构函数之外释放对象的内存。

实际上,这是导致您出现问题的原因,因为创建的对象从未分配过malloc

在这种情况下,正确的解决方案是不仅删除free调用,而且删除整个析构函数,因为该类不需要此调用。