C/C++ 虚函数
虚(virtual)函数是为了实现多态,派生类可以覆写(override)基类的虚函数。
1、多态(polymorphism),即基类指针或者引用,可能指向基类对象,也可能指向派生类对象,会根据运行时具体指向的对象,来调用不同的函数。
2、如果没有多态,则什么类型的指针或者引用,就会调用什么类型的对象的函数。
class Animal {
public:
// 编译时静态绑定
void print1() {
printf("print1 parent class.\n");
}
// 虚函数,告诉编译器,运行时动态绑定。
virtual void print2() {
printf("print2 parent class.\n");
}
virtual void print3() {
printf("print3 parent class.\n");
}
};
class Dog: public Animal {
public:
void print1() {
printf("print1 Dog class.\n");
}
void print2() {
printf("print2 Dog class.\n");
}
};
Animal *pAni;
Dog dog;
pAni = &dog;
pAni->print1();
pAni->print2();
pAni->print3();
输出:
print1 parent class.
print2 Dog class.
print3 parent class.
3、每个包含虚函数的类(也叫虚类),都有一个虚函数表(简称虚表),表项是一个虚函数的地址。
4、如果基类是虚类,则继承类也是虚类。
5、虚类的对象最前面都是一个虚表指针,指向类的虚表。


浙公网安备 33010602011771号