class People
{
public:
virtual void done()
{
cout<<"干活"<<endl;
}
};
class Man: public People
{
public:
virtual void done()
{
cout<<"上班"<<endl;
}
};
class Woman : public People
{
public:
virtual void done()
{
cout<<"做家务"<<endl;
}
};
void main()
{
People *people = new People();
People *xiaoMing = new Man();
People *xiaoHong = new Woman();
people->done();//输出干活
xiaoMing->done();//输出上班
xiaoHong->done();//输出做家务
}
虚函数表指针指向虚函数表的起始位置,调用的时候通过虚函数表指针找到虚函数表中对应的虚函数,子类在继承父类的时候,会将父类的虚函数表复制下来,地址和父类虚函数表的地址相同,虚函数指针指向自身的虚函数表其实仍是父类的虚函数表,只会调用父类的虚函数,如果子类定义的自己的虚函数,生成的虚函数表就会覆盖原来从父类复制下来的虚函数表,这时用父类的指针指向子类的对象就会调用自身的虚函数表,从而实现多态。