定义整数之间的特殊划分

Defining special division between integers

本文关键字:划分 整数 之间 定义      更新时间:2023-10-16

我已经在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 aint ba | b表达式的行为和类型,那么你能想象会放任自

流吗?幸运的是,尽管符号rational temp{a, b}与您想要的相差不远(假设您的rational类具有按该顺序排列的分子和分母成员(,并且考虑到它是标准的C++它也是可读的。

如注释中所述,您不能重载内置类型。

您可以做的是:将整数包装在重载此类运算符的新类中。