派生类中虚函数的使用

Use of virtual functions in derived classes

在下面的 class 中,我知道输出将是:

Func A 游戏

Func B 游戏

Func A 游戏

Func B 游戏

要解决这个问题,可以将游戏 functionB() 设为虚拟,但我只是想知道为什么 rpg->functionB() 会在游戏 class 中调用该方法,而不是在 RPG class?有人可以帮忙吗?

class Game  {

     public: Game() {}; 

    void functionA() {cout << "Func A game" << endl;}; 
    void functionB() {cout << "Func B game" << endl;}; 

};

class RolePlayGame: public Game { 

    public: RolePlayGame() {}; 
    void functionB(){ cout << "Func B role play" << endl; }; 

};

int main(){

    Game* g = new Game; Game* rpg = new RolePlayGame;

    g->functionA();
    g->functionB();
    rpg->functionA();
    rpg->functionB();
    delete g;
    delete rpg;

    return 0;
}

我没有在您的代码中看到 virtual 声明的任何函数。只有虚函数在运行时被解析;非虚函数根据静态类型在编译时解析。