【发布时间】:2021-07-13 12:50:32
【问题描述】:
我是一名学生。我目前正在学习 c++ 运算符重载,但我的代码似乎没有发现任何问题,但以下代码没有输出:
#include <iostream>
using namespace std;
class Float {
private:
float data;
public:
Float(float data = 0)
: data(data) {}
friend Float operator+(const Float& a, const Float& b);
friend Float operator-(const Float& a, const Float& b);
friend Float operator*(const Float& a, const Float& b);
friend Float operator/(const Float& a, const Float& b);
friend ostream& operator<<(ostream& out, Float a);
};
ostream& operator<<(ostream& out, Float a) {
out << a.data;
return out;
}
Float operator+(const Float& a, const Float& b) {
return Float(a + b);
}
Float operator-(const Float& a, const Float& b) {
return Float(a - b);
}
Float operator*(const Float& a, const Float& b) {
return Float(a * b);
}
Float operator/(const Float& a, const Float& b) {
return Float(a / b);
}
int main() {
Float f1, f2;
f1 = 2.5;
f2 = 3.1;
cout << "f1+f2: "
<< (f1 + f2) << endl
<< "f1-f2: "
<< (f1 - f2) << endl
<< "f1*f2: "
<< (f1 * f2) << endl
<< "f1/f2: "
<< (f1 / f2) << endl;
}
我尝试了很多变体,例如将 const 和更多内容放在重载部分,但这似乎不起作用。
【问题讨论】:
-
Float(a + b)是无限递归,你想要Float(a.data + b.data)。 -
在
Float operator+(const Float& a, const Float& b)中,您执行return Float(a + b);。a和b的类型是什么?他们会调用哪个操作员将它们加在一起?看到问题了吗? -
@rawrex
endl做得更多,但无法解释为什么这里没有输出 -
浮点运算符+(const Float& a, const Float& b) { return Float(a + b);这将永远保持自我调用......你需要做 Float operator+(const Float& a, const Float& b) { return Float(a.data + b.data); } 你所有的操作符都需要修复。
-
@rawrex: 从
std::endl刷新对于初学者来说甚至更好,因为他们在错误行之前没有“丢失输出”。