提问者:小点点

C++-重载运算符>和指针


我正在构建一个关于有理数的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);

但我不确定这是正确的方式!感谢您的帮助:)


共1个答案

匿名用户

你走到很高的草丛里,这会产生各种不必要的问题。通常,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代表左手边)。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++-|重载|运算符|指针)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?