我正在构建一个关于有理数的C++项目。我已经定义了一个名为RationalNumber的类,它包含了构造函数和算术(+,-,*,/)运算符、关系(<,>,<=,>=)运算符和相等(==,!=)运算符的重载,还有>>运算符。我有两个私有属性:分子和分母(整数)。现在,我有个问题!为了返回两个RationalNumber对象中较大的指针,可以重新重载operator>?如果是,我该怎么做?
我就这样试过:
RationalNumber* RationalNumber::operator>(const RationalNumber& rn){
RationalNumber bigger;
if((double(numerator)/double(denominator) > double(rn.numerator)/double(rn.denominator))){
bigger.set_numerator(numerator);
bigger.set_denominator(denominator);
}
else{
bigger.set_numerator(rn.numerator);
bigger.set_denominator(rn.denominator);
}
return &bigger;
}
哪里
void set_numerator (int num) { numerator=num; }
void set_denominator (int denom) { denominator=denom; }
并将分子和分母设置为公共属性。在main函数中,我尝试打印
RationalNumber a( 2, 3 ), b( 1, 3 );
cout<<(a>b);
但我不确定这是正确的方式!感谢您的帮助:)
你走到很高的草丛里,这会产生各种不必要的问题。通常,operator<
(和pals)可以是非成员函数(最好),它们不应该更改任何内容。
bool operator>(const RationalNumber& lhs, const RationalNumber& rhs)
{
const auto lhs_ratio = double(lhs.numerator)/double(lhs.denominator);
const auto rhs_ratio = double(rhs.numerator)/double(rhs.denominator);
return lhs_ratio > rhs_ratio;
}
(LHS
代表左手边)。