Может ли кто-нибудь объяснить мне, что я делаю неправильно здесь?
struct X {
int x{};
explicit X(int x) : x(x) {}
virtual X &operator++() = 0;
};
struct OK : X {
int ok{};
explicit OK(int ok) : X(ok), ok(ok) {}
X &operator++() override {
ok += 10;
return *this;
}
};
struct MU : X {
int mu{};
explicit MU(int mu) : X(mu), mu(mu) {}
X &operator++() override {
mu *= 5;
return *this;
}
};
int main() {
X *x_base = new OK(0);
++x_base;
std::cout << x_base->x;
return 1;
};
Все, что я пытаюсь сделать, это использовать идею полиморфизма для операторов, в частности для оператора ++. Я хочу получить что-то вроде этого:
База* база = новая производная();
++base ‹--- ++ следует вызывать из класса Derivate
База* база2 = ned Derivate_2();
++base ‹--- ++ следует вызывать из класса Derivate_2
ОБНОВЛЕНИЕ:
Текущее решение моей проблемы — использовать ++(*base), о котором я уже знаю.
Но есть ли другой способ сделать ++base вместо ++(*base)?
Спасибо за помощь :)
x_base
является указателем наX
. Увеличение указателя — это не то же самое, что применение оператора увеличения к объекту. Ваш код, печатающийx_base->x
, имеет неопределенное поведение, поскольку после увеличенияx_base
не указывает на существующий объект. Измените приращение на++(*x_base)
. - person Peter   schedule 18.02.2019