虚函数的原理

#include <iostream>

using namespace std;

class A

{

//?** vptr; //只要有虚函数,系统就会从中定义一个指针(vptr)指向虚函数表,并将其派生到子类(不管子类有没有改写)当中

//虚函数表中的元素则指向该类当中对应的虚函数,只要派生类中有虚函数改写了,该类中的虚函数

//表的相关位置就会发生改写(若有还有该类的派生类,则继承其虚函数表,依次推理)

public:

virtual void fun(){cout << "A";}

};

class B:public A

{

public:

void fun(){cout <<"B";}

};

class C:public B

{

public :

void fun(){cout << "C";};

};

int main() //只要是调用虚函数就一定是通过调用虚函数表来调用

{

C c;

A*a=&c;

// a->C::fun(); //错误,因为a指针的类型为A只能存储A中的fun函数

a->fun(); //调用通过虚函数指针来调用C::fun()

return 0;

}

你可能感兴趣的:(虚函数)