C++面试八股-基础(一)

1.什么是多态?静态和动态多态的实现原理?

答:多态指的是一种相同的形式表现出不同行为的概念,分为静态多态和动态多态。代码层面,静态多态通过重载(overload)实现,动态多态通过覆盖(override)实现;原理层面,静态多态通过名称修饰(name mangling)实现,动态多态通过虚函数表实现。

对于函数重载,编译器通过函数名和其参数类型识别重载函数。为了保证类型安全的连接(type-safe linkage),编译器用参数个数和参数类型对每一个函数标识符进行专门编码,这个过程有时称为“名字改编”(name mangling)或“名字修饰”(name decoration)。类型安全的连接使得程序能够调用合适的重载函数并保证了参数传递的一致性。编译器能够检测到并报告连接错误。且函数重载需要满足函数名称相同,但函数参数列表不相同的条件。

对于动态多态,首先要保证该函数是虚函数,如果不是虚函数,而子类父类中存在同名的函数,则二者是无关系的。当有虚函数声明时,编译器会创建一个虚函数表,将当前的虚函数按照声明次序放入虚函数表中,而这个虚函数表实际上就是一个函数指针数组,然后将当前这个虚函数表的地址放入对象模型的最起始位置。所以本质上虚函数表是一个函数指针数组。编译器会为包含虚函数的类生成一个成员变量&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值