虚函数的实现
如果一个类的内部有虚函数,那么编译器会在类的内部添加一个虚拟函数表指针(vptr),这个vptr指向一个虚拟函数表,表中存放着该类所有虚拟函数的入口地址,在每一次虚函数调用时,会去这个表中查找地址。
多态的两种形式
1、 静态多态(编译阶段)
包括函数重载和泛型编程。
在编译时就可以确定使用的接口。
2、 动态多态(运行阶段)
包括虚函数。
具体引用的接口在运行时才能确定
构造函数为什么不能是虚函数
① vptr存放在对象的内部空间,需要构造函数来完成初始化。但如果构造函数是虚函数,那么调用构造函数则需要去寻找vptr,但此时vptr还未初始化,无法调用构造函数。
② 构造函数的作用是用来进行对象的初始化,在对象的生命期内仅运行一次,不是对象的动态行为,没必要成为虚函数
析构函数为什么常常是虚函数
析构函数
在某个对象被注销时,编译器会自动顺序调用该类极其父类的析构函数,而不会调用派生类的析构函数。
析构函数为什么常常是虚函数
fatherClass *p = new sonClass(); //用父类指针指向子类对象时
d