混合数字类操作数重载C++
Mixed numerals class operand overloading C++
所以我正在为我的OO类编写一个混合数字类。我们需要重载每个比较和布尔操作数(以及其他内容),但我在如何考虑"<"和">"操作数方面遇到了麻烦。以下是我的"=="和"!="操作数函数,用于某些上下文。
编辑:另外,如果有人对加法/减法有任何提示,我将不胜感激。
bool operator ==(Mixed& mn1, Mixed& mn2){
mn1.ToFraction();
mn2.ToFraction();
mn1.Simplify();
mn2.Simplify();
if(mn1.numerator == mn2.numerator && mn1.denominator == mn2.denominator)
return true;
else
return false;
}
和
bool operator !=( Mixed& mn1, Mixed& mn2){
mn1.ToFraction();
mn2.ToFraction();
mn1.Simplify();
mn2.Simplify();
if(mn1.numerator == mn2.numerator && mn1.denominator == mn2.denominator)
return false;
else
return true;
}
如果有人能提供一些指导,我将不胜感激。哦,我们不能将它们转换为小数进行比较。
编辑:这是我的标题。
#include <iostream>
using namespace std;
class Mixed
{
public:
Mixed(int integer, int numerator = 0, int denominator = 1);
Mixed(int integer = 0);
double Evaluate();
void ToFraction();
void Simplify();
friend istream& operator >>(istream& in, Mixed& mn);
friend ostream& operator <<(ostream& out, Mixed& mn);
friend bool operator ==( Mixed& mn1, Mixed& mn2);
friend bool operator !=( Mixed& mn1, Mixed& mn2);
friend bool operator >( Mixed& mn1, Mixed& mn2);
friend bool operator <( Mixed& mn1, Mixed& mn2);
friend bool operator <=( Mixed& mn1, Mixed& mn2);
friend bool operator >=( Mixed& mn1, Mixed& mn2);
friend const Mixed operator +( Mixed& mn1, Mixed& mn2);
friend const Mixed operator -( Mixed& mn1, Mixed& mn2);
friend const Mixed operator *( Mixed& mn1, Mixed& mn2);
friend const Mixed operator /( Mixed& mn1, Mixed& mn2);
private:
int GCD(int a, int b);
int integer, numerator, denominator;
};
有
理数非常简单:有理数是一对(a,b)整数,通常写为a / b
,直到等价性为(a,b)≡(a',b')当且仅当ab'=a'b。
因此,如果您的类包含两个代表性整数 p
和 q
,则可以将相等运算符实现为:
struct Rational
{
int p; // numerator
unsigned int q; // denominator
bool operator==(Rational const & rhs) const
{
return p * rhs.q == rhs.p * q;
}
// ...
};
对于两个正有理数,你通过p * rhs.q < rhs.p * q
有不等式。所有其他关系都可以根据这两者来实现,例如 x <= y
与!(y < x)
等相同。
分子和分母除以它们的 GCD 来完成将有理数取消到最低项,正如您似乎已经实现的那样。
"混合"数,即整数加有理数小于一,被简单地转换为通常的分子分母有理表示以供操作,并通过积分除法和余数回到混合形式。
要比较有理数,您通常希望找到一个公分母,然后比较分子。对于这样的比较,你也不需要减少到最低的术语(尽管它足够快速/容易,这样做通常是相当无害的)。
如果您决定保持相等比较不变,则可以将它们简化为:
bool operator ==(Mixed mn1, Mixed mn2){
mn1.ToFraction();
mn2.ToFraction();
mn1.Simplify();
mn2.Simplify();
return mn1.numerator == mn2.numerator && mn1.denominator == mn2.denominator;
}
相关文章:
- 继承函数的重载解析
- 你能重载对象变量名本身返回的内容吗
- 从父命名空间重载类型
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 重载操作程序时出错>>用于类中的字符串 memebr
- 一个关于在C++中重载布尔运算符的问题
- 不同翻译单元中不可重载的非内联函数定义
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 将重载的成员函数传递给函数模板
- c++:可变模板和函数重载
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 重载==不适用于二进制树
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 重载运算符new[]的行为取决于析构函数
- 正在尝试重载二进制搜索树分配运算符
- 重载Singly Linked List中的赋值运算符
- 取消引用运算符不能重载