【问题标题】:C++ - Overload operator > and pointersC++ - 重载运算符 > 和指针
【发布时间】:2021-07-02 07:50:03
【问题描述】:

我正在构建一个关于有理数的 C++ 项目。 我已经定义了一个名为 RationalNumber 的类,它具有构造函数和算术(+、-、*、/)、关系(、=)和相等(==、!=)运算符的重载,还有>>。我有两个私有属性:分子和分母(整数)。 现在,我有一个问题!是否可以重载运算符 > 以返回两个 RationalNumber 对象中较大的一个指针?如果是,我该怎么办?

我是这样尝试的:

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);

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

【问题讨论】:

  • return &amp;bigger; 将返回悬空指针。
  • 疯了!接下来怎么办,重载&lt;&lt;&gt;&gt; 来读写有理数??
  • std::cout &lt;&lt; std::max(a, b);?
  • 真正的问题是为什么operator&gt; 的返回类型应该与bool 不同? somone 是否试图搞砸代码阅读器?
  • 返回两个 RationalNumber 对象中较大的一个指针? -- 你的教授,很抱歉,浪费了很大一部分,如果不是一整天的话,当有更多本可以教授的相关 C++ 问题。

标签: c++ class pointers overloading


【解决方案1】:

可以重载运算符 > 以返回指针 两个 RationalNumber 对象中的较大者?如果是,我该怎么做?

是的,这是可能的,但最好返回引用而不是指针:

const RationalNumber& operator>(const RationalNumber& a, const RationalNumber& b)
{
    return a.greaterThen(b) ? a : b;
}

这会将引用(可以转换为指针)返回到更大的数字,但这与将手指插入墙壁插座一样好。可能,但不明智。旁注:我使用greaterThen 方法来避免重复使用我不喜欢的代码(这是另一个主题)。

请注意,您的类型是算术类型。它的行为应该像其他算术类型:int, double .... 。因此任何使用RationalNumber 的人都可以快速了解如何使用这种类型编写和阅读代码。

因此预计它会以标准方式编译和工作,例如:

if (a > b) { // with your overload will not compile or will lead to unexpected behavior
   ...
}

if (a > b && b > c) { // same as above
   ...
}

// note this overloads:
foo(RationalNumber x);
foo(bool codition);

foo(a > b); // now unexpected function is called

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2014-12-24
    • 1970-01-01
    相关资源
    最近更新 更多