3.0 C++远征:虚函数与虚析构函数实现原理

2-7虚函数与虚析构函数实现原理

1.虚函数的实现原理

(1)引入概念:函数指针

指向函数的指针——函数指针。 函数指针指向函数的内存地址。

(2)多态的实现原理

虚函数表指针

​ vftable_ptr,4字节,指向一张虚函数表的首地址。

虚函数表

​ 表中存放各虚函数入口地址,此地址指向虚函数。

​ 派生类中如果定义了同名虚函数,派生类中的虚函数表存放的此虚函数入口地址是派生类中定义的,则将基类的同名虚函数覆盖。即为多态的实现原理。

(3)函数的覆盖与隐藏

函数的隐藏

​ 派生类中的函数与基类的函数同名,即为隐藏。

函数的覆盖

​ 派生类中的虚函数与基类的虚函数同名,即为覆盖。

(4)虚析构函数的实现原理

现象:

​ 使用基类的指针指向派生类的对象,通过delete释放基类的内存,执行完基类的析构函数,就会执行派生类的析构函数。

本质

​ 使用基类的指针指向派生类的对象,通过delete删除基类指针的时候,基类通过虚函数表指针找到虚函数表,再通过虚函数表找到派生类的析构函数,从而执行派生类的析构,之后系统自动实现基类的析构。

posted @ 2016-11-18 14:07  青_阳  阅读(215)  评论(0编辑  收藏  举报