Оператор перегрузки ++ - PullRequest
       1

Оператор перегрузки ++

5 голосов
/ 30 ноября 2011

Я пытаюсь справиться с перегрузкой операторов в первый раз, и я написал этот код для перегрузки оператора ++ для увеличения переменных класса i и x на единицу .. Это делает работу, но компилятор показал эти предупреждения:

Предупреждение 1, предупреждение C4620: не найдена постфиксная форма оператора ++ введите 'tclass', используя префикс форма c: \ users \ ahmed \ desktop \ cppq \ cppq \ cppq.cpp 25

Предупреждение 2, предупреждение C4620: не найдена постфиксная форма оператора ++ введите 'tclass', используя префикс форма c: \ users \ ahmed \ desktop \ cppq \ cppq \ cppq.cpp 26

Это мой код:

class tclass{
public:
    int i,x;
    tclass(int dd,int d){
        i=dd;
        x=d;
    }
    tclass operator++(){

        i++;
        x++;
        return *this;

    }
};

int main() {
    tclass rr(3,3);
    rr++;
    rr++;
    cout<<rr.x<<" "<<rr.i<<endl;
    system("pause");
    return 0;
}

Ответы [ 3 ]

12 голосов
/ 30 ноября 2011

Этот синтаксис:

tclass operator++()

для префикса ++ (который обычно записывается как tclass &operator++()). Чтобы различить приращение постфикса, вы добавляете неиспользуемый аргумент int:

tclass operator++(int)

Также обратите внимание, что приращение префикса лучше возвращает tclass &, поскольку результат может использоваться после: (++rr).x.

Опять же, обратите внимание, что приращение постфикса выглядит так:

tclass operator++(int)
{
    tclass temp = *this;
    ++*this;     // calls prefix operator ++
                 // or alternatively ::operator++(); it ++*this weirds you out!!
    return temp;
}
6 голосов
/ 30 ноября 2011

Есть два ++ operator с. Вы определили один и использовали другой.

tclass& operator++(); //prototype for    ++r;
tclass operator++(int); //prototype for  r++;
5 голосов
/ 30 ноября 2011

Существуют отдельные перегрузки для постинкремента и преинкремента.Подпись постинкрементной версии - operator++(int), а подпись преинкремента - operator++().

Вы определили operator++(), поэтому вы указали только преинкремент.Однако вы используете postincrement в экземпляре вашего класса, поэтому компилятор сообщает вам, что будет использовать вызов функции preincrement, потому что postincrement не определен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...