派生类的虚函数调用基类的虚函数

时间:2020-07-10 01:43:06

标签: c++ virtual-functions

#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)中调用它。上面的代码为什么会有段错误。谢谢!

1 个答案:

答案 0 :(得分:1)

注释掉的代码是正确的。

Widget::resize();

您的替代代码错误。

Widget* th = static_cast<Widget*>(this);
th->resize();

考虑一下:您正在通过 指向基类的指针 来调用虚拟函数。当您使用任何虚函数执行此操作时会发生什么?它称为最派生的版本。换句话说,无限递归。