#include <stdio.h>
#include <vector>
using namespace std;
class CBase
{
public:
CBase()
{
}
~CBase()
{
}
virtual void fun1()
{
printf("base fun1\n");
}
void fun2()
{
printf("base fun2\n");
}
void fun3()
{
fun1();
fun2();
}
};
class CSon : public CBase
{
public:
CSon()
{
}
~CSon()
{
}
void fun2()
{
printf("son fun2\n");
}
};
int main()
{
CSon son;
son.fun3();
return 0;
}
输出结果是base fun1和base fun2
因为son没有重新定义fun3,就直接获取到父类的函数地址运行,这里没有进行动态绑定的判断,是直接获得。当子类的函数没有被重写,子类会直接找到父类的函数地址进行运行,virtual和非virtual得区别在于,声明的对象virtual可以用父类的指针来声明,在调用函数的时候,系统会动态绑定真正的函数地址。