C++多态的实现和原理

一、多态的实现

1. 在编译期间实现多态

多态是指在不同的条件下表现出不同的状态,C++中通过重载函数的方法,可以在编译期间实现多态。(静态多态)

在编译期间,编译器会根据参数列表的不同寻找合适的函数。

2. 使用虚函数实现多态

通过继承重写基类的虚函数实现多态,运行时在虚函数表中寻找调用函数的地址。(动态多态)

在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时会根据对象的实际类型来调用相应的函数。如果对象是子类,就调用子类的函数;如果对象类型是父类,就调用父类的函数,此为多态的表现。

 

二、多态的实现原理

1.重要名词

用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员;

存在虚函数的类都有一个以为的虚函数表叫做虚表。当类中声明虚函数时,编译器会在类中生成一个虚函数表;

类的对象有一个指向虚表开始的虚指针。虚表时和类对应的,虚表指针时和对象对应的。

虚函数表是一个存储类成员函数指针的数据结构;

虚函数表是由编译器自动生成与维护的;

virtual成员函数会被编译器放入虚函数表中;

当存在虚函数时,每个对象都有一个指向虚函数的指针

虚函数指针一般作为类对象的第一个成员

2. 虚函数表

虚函数表时通过一块连续的内存来存储虚函数的地址。这张表解决了继承、虚函数(重写)的问题。在有虚函数的类的对象中都存在一张虚函数表,它就像一张地图,指向了实际调用的虚函数。

C++多态的实现和原理

 

 

 

C++多态的实现和原理

 

 

 

C++多态的实现和原理

两篇很好的博文

https://www.jianshu.com/p/c8e74ef95091

https://www.jianshu.com/p/31373b52902d

原文链接: https://www.cnblogs.com/cjsword/p/12898273.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++多态的实现和原理

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/197409

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午7:33
下一篇 2023年2月12日 下午7:33

相关推荐