定义整数之间的特殊划分
Defining special division between integers
我已经在C++中在这个字段上实现了有理数字段和运算符(+,*,-,/(和(==,>,<(。这很简单,我为此创建了一个名为rational的类。
我还添加了数学运算符 (+,*,-,/( 和 (==,>,<( 用于分数和整数之间的运算。在我的代码中,整数和有理数之间的任何操作都会导致有理数。
我在最后一步遇到问题:我想在整数上创建一个替代除法运算符 |,以便 int a | int b = rational (a,b(。 如何在C++做到这一点?问题是我不知道如何在"整数类"中添加任何方法,我不知道如何编辑这个"隐藏"类。如果我能做到这一点,我只会添加方法
rational operator | (int x){
rational temp;
temp.numerator=value;
temp.denominator=x.value;
temp.reduce();
return temp;
}
到整数类。我调用了整数类值的类变量。并使用了我现有的理性类归约方法。
首先,我建议不要这样做,因为operator |
通常没有这种副作用。以这种方式重载运算符违反了这些重载运算符一般规则中的第 2 条规则。
好的,按照我们的方式,C++不允许你重载整型数据类型的运算符。如果他们这样做,这可能会破坏代码。
但是,您可以使用有理数重载运算符。你可以这样做:
class rational {
rational operator|(rational other) {
return rational(this->numerator, other.numerator);
}
};
然后,您可以创建一些构造函数,如下所示:
class rational {
// I'm assuming you have something like this for the implementation of operator| to work
rational(int n, int d) {
this->numerator = n;
this->denominator = d;
}
// This constructor creates a rational by putting everything over 1
// This will function the same mathematically as the number itself
rational(int n) {
this->numerator = n;
this->denominator = 1; // a single number is put over 1
}
};
现在,您可以使用这样的operator|
:
rational r = rational(5) | 7;
这似乎接近你想要的。
注意:当你到达这里时,如果你让有理数接受构造函数中的单个数字并将其放在 1 上,你可能会意识到你不需要特殊的operator|
来以这种方式创建有理数。如果你的有理数通过使用乘以倒数来实现除法,你可以简单地这样做:
rational r = rational(5) / 7;
无论如何,这更清楚你打算做什么。
如何编辑这个"隐藏"类。
整数没有"隐藏"类。int
和其他整数类型根本不是类;并且不可能重载它们的算术运算符。
问题是我不知道如何将任何方法添加到"整数类"中,
第一步当然是为整数创建一个类。就像你为有理数创建了一个类一样。
你不能,正如其他剃须者所说。
但是您可以轻松地接受Rational(int dividend)
会产生dividend/1
。
然后用户可以很容易地写Rational(dividend)/divisor
,你/可以/重载。你必须决定这是否比Rational(dividend,divisor)
更好。当然,他们也可能写dividend/Rational(divisor)
,如果你愿意,你也可以重载它。
你不能:如果你能改变int a
和int b
a | b
表达式的行为和类型,那么你能想象会放任自
流吗?幸运的是,尽管符号rational temp{a, b}
与您想要的相差不远(假设您的rational
类具有按该顺序排列的分子和分母成员(,并且考虑到它是标准的C++它也是可读的。
如注释中所述,您不能重载内置类型。
您可以做的是:将整数包装在重载此类运算符的新类中。
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何只允许用户输入正整数
- 如何在c++中从文本文件中逐行读取整数
- C++:如何循环通过向量中的整数元素
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 序列化,没有库的整数,得到奇怪的结果
- 在一定长度后从数组中打印时缺少整数
- 定义整数之间的特殊划分
- 从opencv的视频关注和标量拍摄的图像之间的整数划分
- 当两个都是变量时,如何将浮动划分为整数
- 将整数范围划分为几乎相等的整数范围