Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过运算符指定操作后的对象_C++_Operator Overloading_Assignment Operator - Fatal编程技术网

C++ 通过运算符指定操作后的对象

C++ 通过运算符指定操作后的对象,c++,operator-overloading,assignment-operator,C++,Operator Overloading,Assignment Operator,我想添加两个类的内容并将它们保存在另一个类中。我创建了构造函数、参数化构造函数、析构函数和重载的=参数。对于Demo b=a,它工作正常但是当我试图保存由a.addition(b)给出的对象时,出现了错误no-available重载'='。我的概念是为什么对象没有被复制到新创建的对象 课堂演示 class Demo { int* ptr; public: Demo(int data = 0) { this->ptr = new int(data);

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

课堂演示

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

操作符=
将对非常量的引用(即
演示&
)作为其参数,该参数不能绑定到通过
添加返回的临时对象

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

顺便说一句:任务的目标和来源似乎是相反的。我想它应该按如下方式实施

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

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

您的赋值运算符很奇怪。它改变了rhs而不是lhs。如果我写
a=b
我不希望b被修改。@StoryTeller你说得对。那是错误的。
Demo& operator= (const Demo& obj) {
    setData(obj.getData());
    return *this;
}