虚函数内存模型
纯虚函数
在有些情况下,在基类中不对虚函数给出有意义的实现,仅当做统一的变成接口来使用,它的实现留给该基类的派生类去做,这种称为纯虚函数
纯虚函数相当于一个接口模板,一个类中如果定义了纯虚函数,则这个类被称为抽象类,C++规定抽象类不能直接实例化对象
派生类继承父类的纯虚函数后,若给出了实例化对象就可以实例化,不然也不行。
1 #include<iostream> 2 using namespace std; 3 4 class Animal 5 { 6 public: 7 virtual void jiao() = 0; 8 }; 9 class ji :public Animal 10 { 11 public: 12 void jiao() 13 { 14 cout << "咕咕咕咕" << endl; 15 } 16 }; 17 void test01() 18 { 19 ji Testji; 20 Animal& TestA = Testji; 21 TestA.jiao(); 22 } 23 int main() 24 { 25 test01(); 26 return 0; 27 }
虚函数内存模型
不存在继承关系的虚函数内存模型
只要一个类中存在有虚函数,对象内就会产生一个虚表指针,执向虚函数表。虚函数表里存放的是当前类内所有的虚函数
虚函数表只存在一个,保存在常量区
实例化出的对象的虚表指针指向的是同一个表
派生类中的虚表指针保存了那些内容?
1 父类的虚函数
2 重写的父类的虚函数 将父类的虚函数重写用自己的虚函数来填充到虚函数表里
3 自己的虚函数 (在虚函数表结尾)