在派生类中使用虚函数
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->function()
调用游戏的functionB()
而不是它自己的?
@LeeRobinson 因为rpg
是Game *
类型并且因为它不是虚函数,所以编译器只查看指针的编译时类型。
@LeeRobinson 在您发布的代码中,函数不是虚拟的,因此它们在编译时根据表达式的静态类型进行解析。由于rpg
的类型为Game*
,因此静态类型为Game
。以上是关于在派生类中使用虚函数的主要内容,如果未能解决你的问题,请参考以下文章