你好,我是雨乐!
作为一名C 面试官,问的最多的问题就是说说多态的实现机制
,无非想听到的答案就是虚函数以及虚函数表,也算是烂大街的问题了,稍微有点经验的候选人都会答上个一二三。今天,借助本文,我们聊聊实现多态的几个方式。
本文主要内容如下图所示:
背景
前段时间,群里某个读者突然抛出了一个问题,说是去面试的时候,面试官问了一个问题说说动态多态的实现方式
,该读者详细的说了自己所知道的虚函数以及虚函数的实现机制,不过,貌似面试官不是很满意这个答案。
说实话,作为从事CPP开发十几年的水货,遇到这个题目,我也是跟上述读者一样,只知道虚函数机制,后面查了相关资料,才知道还有其他几种。
今天,借助本文,我们就聊聊动态多态的几种实现方式,当然,项目中不一定要用到,但总归还是要了解的。
概念
自我们接触C 开始,就提到了C 的三大特性封装
、继承
和多态
。
多态(Polymorphisn)是面向对象程序设计(OOP)的一个重要特征。多态字面意思为多种状态。在面向对象语言中,一个接口,多种实现即为多态。
在C 中,多态体现在编译时和运行时两个方面。将编译时多态称之为静态多态
,而将运行时多态称之为动态多态
。
静态多态和动态多态的区别是在什么时候将函数实现和函数调用关联起来,是在编译时还是运行时。
传统上,静态多态分为函数重载
和模板(也称为泛型编程)
两种。而运行时多态则仅有虚函数一种
。在本文中,我们将讲解另外两种多态-函数指针多态(静态多态)
和variant多态(动态多态)
两种。
虚函数
我敢保证,在大部分情况下,当听到运行时多态实现机制的时候,你第一印象肯定是虚函数