C++ 重载=c+中的运算符+;带浮点参数

C++ 重载=c+中的运算符+;带浮点参数,c++,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;

我有以下计划:

#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;
}
#包括
使用名称空间std;
N类{
公众:
浮动x;
N(){x=3.0;}
N(float y){x=y;}
N&运算符=(浮点f){返回*新N(f);}
};
int main(){
N a;
a=2.0;

CUT< P>不应该使用新的,C++不是java。
N& operator=(float f)
{ 
    x = f; 
    return *this; 
}

试试这个。

您的复制分配操作符应该设置x的值,然后返回对*的引用,如下所示:

N &operator =(float f) { x = f; return *this; }

相反,您的复制赋值运算符正在堆上构造一个新的N实例,并返回对该实例的引用。

为什么要返回对
*new N(f)的引用
操作符=
应该返回
*这个
…而且,您没有在赋值操作符中更改任何内容。为什么您甚至希望它起作用?复制赋值操作符是用于分配给
这个
,您不应该创建另一个对象。您需要一个属性并学习一些基本知识。简化它:
N&运算符=(float f){x=f;return*this;}
为什么投反对票?他发布了一个编译的示例。