【问题标题】:Use of virtual functions in derived classes在派生类中使用虚函数
【发布时间】:2015-01-05 15:32:30
【问题描述】:

在以下课程中,我知道输出将是:

Func A 游戏

Func B 游戏

玩游戏

Func B 游戏

修复它是让 Game functionB() 成为虚拟,但我只是想知道为什么 rpg->functionB() 会调用 Game 类而不是 RPG 类中的方法?有人可以帮忙吗?

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;
}

【问题讨论】:

    标签: c++ inheritance virtual


    【解决方案1】:

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

    【讨论】:

    • 抱歉不清楚,我在游戏类中前面有“虚拟”functionA()functionB(),它按预期工作。我只是想知道为什么rpg-&gt;function() 调用游戏的functionB() 而不是它自己的?
    • @LeeRobinson 因为rpgGame * 类型并且因为它不是虚函数,所以编译器只查看指针的编译时类型。
    • @LeeRobinson 在您发布的代码中,函数不是虚拟的,因此它们在编译时根据表达式的静态类型进行解析。由于rpg 的类型为Game*,因此静态类型为Game
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多