我有以下程序:
#include <iostream>
using namespace std;
class N {
public:
float x;
N(){ x = 3.0; }
N(float y){ x = y; }
N &operator=(float f){ return *new N(f); }
};
int main(){
N a;
a = 2.0;
cout << a.x;
return 0;
}
我期待结果为2(因为operator =的定义),但它给了我3(就像没有a = 2.0的行)。有人可以解释一下,为什么会发生这种情况,定义&#39; operator =&#39;?谢谢......
答案 0 :(得分:2)
您的复制赋值运算符应该设置x的值,然后返回对* this的引用,如下所示:
N &operator =(float f) { x = f; return *this; }
相反,您的复制赋值运算符正在堆上构造N的新实例,并返回对该实例的引用。
答案 1 :(得分:0)
你不应该使用new,C ++不是java。
N& operator=(float f)
{
x = f;
return *this;
}
试试这个。