Попытка перегрузить оператор постинкремента в C ++, но ответ не такой, как ожидалось - PullRequest
0 голосов
/ 31 марта 2019
#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. Почему мой перегруженный оператор не работает ... и, в частности, что не так с этим код rsince кажется, что в этой части есть логическая ошибка:

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

1 Ответ

2 голосов
/ 31 марта 2019

Обратите внимание, что вы перегрузили оператор ++ для класса B.Метод cal увеличивается с использованием ++ члена temp1, который является int, а не B - следовательно, он обычно увеличивается с 10 до 11.

Если вывыполнив b++ в вашей main функции, вы бы получили то, что ожидали.Примечание ++ должен возвращать предыдущее значение увеличенного объекта, если вы хотите оставаться в соответствии с ожиданиями большинства людей, поэтому

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

будет работать.

...