class A:{
public:void test(){cout << "in class A" << endl;}
};class B:public A{
public:void test(){cout << "in class B" << endl;}
}void DoSomething(A &obj) { obj.test();
}int main(int argc, char **args){ B b;b.test(); //输出:in class BDoSomething(b); //输出:in class A
}
class A:{
public:virtual void test(){cout << "in class A" << endl;}
};class B:public A{
public:void test(){cout << "in class B" << endl;}
}void DoSomething(A &obj) { obj.test();
}int main(int argc, char **args){ B b;b.test(); //输出:in class BDoSomething(b); //输出:in class B
}
运行时多态是通过虚函数实现的,为了支持虚函数,编译器会为实现了虚函数的类创建一个静态的虚函数表(Virtual Function Table,VFT),可将VFT视为一个包含该类所有虚函数函数指针的静态数组,其中每个指针都指向相应的虚函数,如果子类未覆盖父类的某个虚函数,子类虚函数表中的指针将会指向父类的虚函数实现,实例化包含虚函数的类时,将创建一个隐藏的指针VFT*,指向相应的VFT。