通过操作员在操作后分配对象

时间:2017-08-27 05:34:30

标签: c++ operator-overloading assignment-operator

我想添加两个类的内容并将它们保存在另一个类中。我创建了构造函数,参数化构造函数,析构函数和重载=参数。它适用于Demo b = a;,但当我尝试保存a.addition(b)给出的对象时,出现错误no viable overloaded '='。我的概念是为什么没有将对象复制到新创建的对象?

课程演示

class Demo
{
    int* ptr;
public:
    Demo(int data = 0) {
        this->ptr = new int(data);
    }
    ~Demo(void) {
        delete this->ptr;
    }
    // Copy controctor
    Demo(Demo &x) {
        ptr = new int;
        *ptr = *(x.ptr);
    }
    void setData(int data) {
        *(this->ptr) = data;
    }
    int getData() {
        return *(this->ptr);
    }

    Demo operator = (Demo& obj) {
        Demo result;
        obj.setData(this->getData());
        return result;
    }

    Demo addition(Demo& d) {
        Demo result;
        cout << "result: " << &result << endl;
        int a = this->getData() + d.getData();

        result.setData(a);

        return result;
    }
};

主要

int main(void)
{
    Demo a(10);
    Demo b = a;
    Demo c;
    c = a.addition(b); // error here
    return 0;
}

1 个答案:

答案 0 :(得分:3)

operator=将非const(即Demo&)作为参数引用,它不能绑定到addition返回的临时对象。

要解决此问题,您应该更改参数类型以引用const(即const Demo&),它可以绑定到临时并且是常规的。

BTW:任务的目标和来源似乎相反。我想它应该实现为

Demo& operator= (const Demo& obj) {
    setData(obj.getData());
    return *this;
}

并将getData声明为const成员函数。