在看公司代码时, 发现了一处关于虚函数的我比较难以理解的地方,大致描述如下:
- 子类继承父类, 包括继承了虚函数和非虚函数
- 子类调用父类中的非虚函数
Base::PrintWord()
, 在这个非虚函数里它又调用了虚函数doPrintWord()
。- 实验表明调用的虚函数执行的是重写的子类虚函数。
大致的代码可以简写为以下一个例子:
#include <iostream>
using namespace std;
class Base{
public:
void PrintWord(const char* c)
{
printf("called in Base::PrintWord, and pointer of this is : 0x%x\n",this);
doPrintWord(c);