尝试重载 c++ 中的后增量运算符,但答案与预期不符


#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。为什么我的重载运算符不起作用...特别是这段代码有什么问题,因为这部分似乎存在逻辑错误:

void operator ++(int)
        {
            temp1+=5;
        }
        void cal()
        {
            temp1 ++;
        }
请注意,

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

如果你在main函数中做b++,你就会得到你所期望的。注意 ++ 应该返回递增对象的先前值,如果您希望与大多数人的期望保持共形,因此

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

会工作。

最新更新