@m1kz

Почему не работает перегрузка класса?

Все хорошо работает пока я не начинаю использовать указатели на объекты классов. Как правильно перегружать эти операторы ?

#include <iostream>

using namespace std;

class A{
    public:
    int x=10;
    char b='0';
    A* operator++(int){
        cout<<"HELLO WORLD"<<endl;
        b='1';
        return this;
    }
};


int main() {
    A a;
    A*p = &a;
    cout<<p->b<<' ' <<p->x<<endl;
    p++;//после этого что-то идет не так
    cout<<p->b<<endl;
    std::cout <<p->x;
    
    return 0;
}
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Оператор не должен возвращать указатель на объект. Он должен возвращать ссылку.

Если же у вас указатель, к которому вы применяете операцию ++, то вызывается не перегруженный оператор, а используется арифметика указателей - просто сдвигается адрес в памяти на следующий.

Попробуйте (*p)++.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы