【发布时间】:2019-07-11 18:17:29
【问题描述】:
谁能向我解释我在这里做错了什么?
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* base = new Derivate();
++base
Base* base2 = ned Derivate_2();
++base
更新:
我的问题的当前解决方案是使用我已经知道的 ++(*base)。
但是有没有其他方法可以用 ++base 代替 ++(*base)?
感谢您的帮助:)
【问题讨论】:
-
x_base是指向X的指针。递增指针与将递增运算符应用于对象不同。您的代码打印x_base->x具有未定义的行为,因为在递增之后,x_base不会指向存在的对象。将增量更改为++(*x_base)。 -
对于您更新的问题,答案是否定的。您不能覆盖指向 Base 的原始指针的内置运算符。
-
那是真的,但是您可以将指针包装在另一个类中并为该包装类编写重载。
标签: c++ polymorphism operator-overloading operators