使用float参数在c ++中重载=运算符

时间:2015-03-03 11:58:45

标签: c++

我有以下程序:

#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;?谢谢......

2 个答案:

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

试试这个。