“多态”的关键在于通过基类指针或引用调用一个虚函数时,编译时不确定到底调用的时基类还是派生类的函数,运行时才确定——这叫“动态联编”
观察如下程序:
多态实现的关键——虚函数表
- 类的前四个字节存放虚函数表的指针
实例证明
class A {public:virtual void Func() {cout << "A::Func" << endl;}};class B:public A {public:virtual vodi Func() {cout << "B::Func" << endl;}};main() {A a;A * pa = new B();pa->Func(); // 输出B::Func// 64位程序指针位8字节long long * p1 = (long long*) & a;long long * p2 = (long long*) pa;*p2 = *p1; // 将a的虚函数表地址给papa->Func(); // 输出A::Func}

