1、对于C++中的虚函数一直都是靠着死记硬背的方式在使用,今天特地查阅了一下它的实现原理。
2、虚函数:C++中为了实现多样性的一个工具。使用virtual关键字修饰的函数即为虚函数,派生类自动继承虚函数性质。使用时,用基类指针指向派生类对象,直接调用派生类的虚函数。达到
接口与实现分离的目的(多样性,相同
的方法接口,但因个体差异而采用不同的实现,传递的消息时一样的,这点不同于重载
)。
3、实现原理:如果类中有虚函数,在创建对象的时候编译器会自动给对象添加一个成员变量*vptr,该指针指向对应类的虚函数地址表vtbl。vtbl的作用是保存类中所有定义的虚函数的函数指针,其结构如下图1所示。 在基类指针指向了派生类对象时,其可以访问派生类的vptr,此时指针vptr指向的是派生类的虚函数表vbtl。该表中存储的是派生类中的定义实现的虚函数。因此,就相当于是使用基类指针直接调用派生类的成员函数了。而用户使用时,只需要使用基类的函数fun()作为接口就可以实现相同的消息不同实体有不同反应的目的了(多样性)。