在派生类中使用虚函数

Posted

技术标签:

【中文标题】在派生类中使用虚函数【英文标题】: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;

【问题讨论】:

【参考方案1】:

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

【讨论】:

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

以上是关于在派生类中使用虚函数的主要内容,如果未能解决你的问题,请参考以下文章

虚函数和基类中的this指针的问题!

派生类中的虚函数

使用基类中的函数静态调用纯虚函数的派生类实现

在“函数参数”中通过const类型在派生类中使用不同函数参数的虚函数会破坏虚函数吗? [重复]

派生类中的方法调用算作虚函数调用吗?

抽象类中的纯虚函数,返回类型为基/派生类型