面试时如何回答:C++的多态

三次面试都遇到了这个问题
我想必须把这个问题搞得引经据典的清楚才不愧对这三次被拒的offer
让下一家再敢问这个问题的面试官,也能一下梳理出几种多态,提问者竟然学到了知识,他肯定好感大增

简单讲,一个接口,多个方法。封装是代码重用,多态是接口重用。
C++的多态性是通过虚函数来实现的

子类重新定义父类的方法称为覆盖 也叫 重写 override

同一个作用域内, 允许有多个同名的函数,这些函数的参数列表不同成为重载,但这并没有体现多态特性

多态非多态的区别就是早绑定还是晚绑定,
编译期间确定函数的是静态编译,早绑定。
运行时才能确定的是动态编译,晚绑定,才是多态。

(动态多态就是通过继承+虚函数才能实现)

只有重写了虚函数才算体现了多态性

虚函数

虚函数的定义是:在基类中进行的,基类中需要定义为虚函数的成员函数的声明冠以关键字 virtual。
此虚函数就可以在一个或多个派生类中被重新定义。但是接口类型、参数个数等都必须与基类一致!

是重载的另一种表现形似,是一种动态重载的方式。提供更灵活的运行时的多态机制。动态链接。(只有通过使用基类指针访问虚函数时才能获得运行时的多态性。)

纯虚函数

抽象类不能实例化对象,只能被继承。

重载,重写(覆盖),以及重定义

在这里插入图片描述
重载overload: 同一作用域,参数列表不同(静态多态),早绑定
【编译器通过参数列表的不同内部给函数重新命名成一些预处理函数,分别调用,这并不是多态】
重写override(覆盖): 不同作用域,子类继承了基类的函数。基类必须有virtual关键字。参数必须相同
重写的函数是虚函数,因而体现了动态多态,晚绑定
重定义redefine(隐藏): 不同作用域。
参数不同时,基类被隐藏;参数相同但是基类无virtual时,基类被隐藏。

https://blog.csdn.net/skySongkran/article/details/82012698

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++多态性具有静态多态和动态多态两个阶段。在编译多态阶段,多态性体现在函数重载和泛型编程方面。通过函数重载,可以使用相同的函数名但不同的参数来重载出不同的函数,这是静态多态性的一种表现。编译器会根据函数的不同参数将其绑定到特定的形式上。在动态多态阶段,多态性体现在运行,具体引用的接口在程序运行才能确定,这是动态多态性的一种表现。多态的字面意思就是多种状态,在面向对象的程序设计中,一个接口可以有多种实现方式。C++通过继承、多态、虚函数等机制来实现多态的概念。因此,C++多态性使得程序可以根据具体的对象类型来调用相应的方法或函数,从而提高代码的灵活性和可复用性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C++面试题总结之基础知识点](https://blog.csdn.net/weixin_42060900/article/details/96503788)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [C++多态的理解](https://blog.csdn.net/weixin_44244332/article/details/123507232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值