#include <iostream>
using namespace std;
class Widget {
public:
int width;
virtual void resize() { width = 10; }
};
class SpeWidget :public Widget {
public:
int height;
void resize() override {
//Widget::resize();
Widget* th = static_cast<Widget*>(this);
th->resize();
height = 11;
}
};
int main() {
//Widget* w = new Widget;
//w->resize();
//std::cout << w->width << std::endl;
SpeWidget* s = new SpeWidget;
s->resize();
std::cout << s->height << "," << s->width << std::endl;
std::cin.get();
}
派生类(SpeWidget)虚拟函数(resize())想要在基类(Widget)中调用它。上面的代码为什么会有段错误。谢谢!
答案 0 :(得分:1)
注释掉的代码是正确的。
Widget::resize();
您的替代代码错误。
Widget* th = static_cast<Widget*>(this);
th->resize();
考虑一下:您正在通过 指向基类的指针 来调用虚拟函数。当您使用任何虚函数执行此操作时会发生什么?它称为最派生的版本。换句话说,无限递归。