关于分数计算器的运算符重载
Regarding Operator Overloading for a Fraction Calculator
我的部分任务是使用教授的.cpp文件。在它中,我应该能够处理A=A+B,其中A和B是两个分数。
&Fraction Fraction::operator+(Fraction b)
{
num = (num * b.denom) + (num * denom);///////
denom = (denom * b.denom);
if ((num * denom) >= 0)
{
sign_factor = 1;
}
else
{
sign_factor = -1;
}
num = sign_factor * abs(num);
denom = sign_factor * abs(denom);
num = (num / (static_cast<double>(find_gcd(num, denom))));
denom = (denom / (static_cast<double>(find_gcd(num, denom))));
return this;
}
我的问题是如何返回对象A,以便main.cpp可以执行成员分配(将A+B的结果分配给A)。此外,我在这个函数中引用num是正确的吗,还是应该使用a.num。例如,它应该是"a.num=sign_factor*abs(num)",还是我所拥有的可以?
非常感谢!!
这个签名毫无意义:
&Fraction Fraction::operator+(Fraction b)
我不知道你的代码的用途,但在a = a + b
中,用结果创建一个临时的并返回可能是有意义的
class Fraction {
public:
Fraction operator+(Fraction b) const // Return a Fraction object
{
Fraction result;
// ... initialize result...
return result;
}
};
如果num
被定义为Fraction
类(或其子类之一)的成员变量,则可以像以前一样安全地使用它或将其用作this->num
编辑:
关于您的评论,我添加了一些代码来解释为什么返回临时对象可能更有意义。比较这两个版本,决定哪一个更适合你的需求。直觉上,第一个是首选,也是最合乎逻辑的选择。
版本1:返回临时(
a
未被修改)class Fraction { public: Fraction operator+(Fraction& b) { Fraction result; result.num = num + b.num; return result; } void operator=(Fraction& b) { num = b.num; } int num; }; int main() { Fraction a, b, c; a.num = 10; b.num = 20; c.num = 0; c = a + b; // a is now 10 // b is now 20 // c is now 30 }
版本2:返回引用并修改
a
class Fraction { public: Fraction& operator+(Fraction& b) { num = num + b.num; return *this; } void operator=(Fraction& b) { num = b.num; } int num; }; int main() { Fraction a, b, c; a.num = 10; b.num = 20; c.num = 0; c = a + b; // a is now 30 <- I believe you don't want this // b is now 20 // c is now 30 }
相关文章:
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- C++20概念:需要运算符重载
- 使用赋值运算符重载从类中返回jobject
- 在运算符重载定义中使用成员函数(const错误)
- 字节到位运算符重载C++
- 为什么在运算符重载时需要参考?
- 类中 c++ 的运算符 + 重载
- 算术复合运算符重载为非成员
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 交换运算符 + 重载会导致无限递归
- 如何理解新的运算符重载?
- 向量保持复数的运算符重载
- 如何创建运算符重载?
- 链接列表运算符重载没有打印出我想要的内容
- C++:需要帮助了解运算符重载错误
- 使用模板化运算符重载 XOR 运算符失败
- 如何确保接受的C++模板类型使运算符重载?
- 运算符重载使用运算符+添加类模板