gpt4 book ai didi

c++ - (*,+,-,/,=) 的运算符重载?

转载 作者:太空狗 更新时间:2023-10-29 23:21:26 24 4
gpt4 key购买 nike

我正在尝试重载 FLOAT 类中的 (*,+,-,/,=) 运算符。我写了这个类:

class FLOAT{
private:
float x;
public:
FLOAT(){ x=0.0; }
void setFloat(float f) { x=f; }
void operator+(FLOAT obj) {x=x+obj.x; };
void operator-(FLOAT obj) {x=x-obj.x; };
void operator*(FLOAT obj) {x=x*obj.x; };
void operator/(FLOAT obj) {x=x/obj.x; };
FLOAT& operator=(const FLOAT& obj) {this->x=obj.x; return *this; };
};

我这样使用它:

int main() {
FLOAT f,f2,f3;
f.setFloat(4);
f2.setFloat(5);

f3=f+f2;// here is the problem!
system("pause");//to pause console screen
return 0;
}

f3=f+f2 好像不对。我能做什么?

最佳答案

我认为您对运算符的实现不会达到您的要求。例如:

FLOAT f1; f1.setFloat(1.0);
FLOAT f2; f2.setFloat(2.0);
FLOAT f3;
f3 = f1 + f2;

假设你改变了operator+(),比如返回一个FLOAT,你仍然会得到加法后f1和f3都等于3.0的效果;

一个常用的习惯用法是在类中实现像+=这样的操作符,在类外实现像+这样的操作符。例如:

class FLOAT {...
FLOAT& operator+=(const FLOAT& f)
{
x += f.x;
return *this;
}
};

...

FLOAT operator+(const FLOAT& f1, const FLOAT& f2)
{
FLOAT result(f1);
f1 += f2;
return f1;
}

这样做的一个附带好处是您还可以轻松添加其他运算符,例如

FLOAT operator+(int x, const FLOAT& f);
FLOAT operator+(double x, const FLOAT& f);

当您想使用更有趣的类型(如复数或矩阵)来完成这项工作时,像这样彻底地完成此类工作是一种很好的做法。确保添加比较运算符、复制构造函数、析构函数和赋值运算符以确保完整性。祝你好运!

关于c++ - (*,+,-,/,=) 的运算符重载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8347018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com