【问题标题】:Tryiing to overload the post increment operator in c++ in but the answer is not as expected试图在 c++ 中重载后自增运算符,但答案与预期不符
【发布时间】:2019-08-21 23:54:29
【问题描述】:
#include <iostream>
using namespace std;

class B{
        int temp1;
    public :
        void disp()
        {   
        cout <<temp1;
        }
        void setA(int a)
        {
            temp1=a;
        }       
        void operator ++(int)
        {
            temp1+=5;
        }
        void cal()
        {
            temp1 ++;
        }
        };  

int main()
{
    B b; 
    b.setA(10);

    b.cal();
    b.disp();
    return 0;
}

我最近了解了运算符重载,所以在玩代码......所以这里的预期答案是 15,但它显示为 11。为什么我的重载运算符不起作用......特别是这有什么问题代码 rs,因为这部分似乎存在逻辑错误:

void operator ++(int)
        {
            temp1+=5;
        }
        void cal()
        {
            temp1 ++;
        }

【问题讨论】:

  • temp1 是一个整数,而不是 B
  • 您希望在这里发生什么:int temp1=10; temp1++;。那么,为什么你的班级的结果会有所不同呢?附言这并不是后增量重载应该如何工作的,但这是另一个问题。

标签: c++ operator-overloading post-increment


【解决方案1】:

请注意,您为类 B 重载了 ++ 运算符。 cal 方法使用 ++ 增加成员 temp1,这是一个 int,而不是 B - 因此 - 它通常从 10 增加到 11。

如果您在 main 函数中完成了 b++,您将会得到您所期望的。注意++ 应该返回递增对象的先前值,如果您希望与大多数人的期望保持一致,那么

something = b++; //something should probably be a B. 

会起作用的。

【讨论】:

  • 所以你在这里说的是因为这个函数void operator ++(int)只能被对象调用并且做temp1++意味着本质上不是对象调用而是'int'调用'++'运算符,因此它可以以 int temp1 的原始方式工作......对吗?
  • @AnasAziz 完全正确。
猜你喜欢
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
相关资源
最近更新 更多