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 B
DoSomething(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 B
DoSomething(b); //输出:in class B
}
运行时多态是通过虚函数实现的,为了支持虚函数,编译器会为实现了虚函数的类创建一个静态的虚函数表(Virtual Function Table,VFT),可将VFT视为一个包含该类所有虚函数函数指针的静态数组,其中每个指针都指向相应的虚函数,如果子类未覆盖父类的某个虚函数,子类虚函数表中的指针将会指向父类的虚函数实现,实例化包含虚函数的类时,将创建一个隐藏的指针VFT*,指向相应的VFT。