虚函数内存模型

纯虚函数

在有些情况下,在基类中不对虚函数给出有意义的实现,仅当做统一的变成接口来使用,它的实现留给该基类的派生类去做,这种称为纯虚函数

纯虚函数相当于一个接口模板,一个类中如果定义了纯虚函数,则这个类被称为抽象类,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 自己的虚函数 (在虚函数表结尾)