【C++-继承面试笔试题总结】

发布于:2022-07-26 ⋅ 阅读:(296) ⋅ 点赞:(0)

请添加图片描述



前言

本文总结学习C++常见继承面试笔试题。


1-什么是菱形继承,菱形继承的问题是什么?

  1. 菱形继承是一种多继承的特殊情况
    在这里插入图片描述
    在这里插入图片描述
  2. 菱形继承的问题是:会数据冗余和二义性的问题

例如上图1,子类3的对象中,将父类的成员会保存两份,在用子类3对象调用父类成员时,不知道调用的是子类1还是子类2继承下来的父类成员。


2-什么是菱形虚拟继承,如何解决数据冗余和二义性的?

同类问题:
虚拟继承实现

  1. 菱形虚拟继承是在菱形继承的基础上,在父类最近的两个子类应用虚拟继承。
    在这里插入图片描述
    在这里插入图片描述

  2. 例如上图1,子类3的对象模型中,会将父类的成员存在父类的公共区域,子类1、2中各自存有一个虚基表指针,存储了各自距离父类成员存储位置的偏移量。

  3. 例如上图1,子类1的对象模型中,会将父类的成员存在父类的公共区域,子类1中存有一个虚基表指针,存储了距离父类成员存储位置的偏移量。

这样,在使用子类1、2、3对象分别调用父类成员时,会统一以同样的方式,先找各自虚基表指针中的偏移量,依次再来计算父类成员的位置,从而找到父类成员。解决了数据冗余和二义性。


3-继承和组合的区别,各自的应用场景?

3.1 继承和组合的区别

  1. pubilic继承是一种is-a的关系,每个派生类对象都是一个基类对象;组合是一种has-a的关系,假设B类组合了A类,则每个B类对象都有一个A类对象。
  2. 继承允许根据基类的实现来定义派生类的实现。这种通过生成派生类的复用通常被称为白箱复用,在继承方式中,基类的内部细节对子类可见,继承一定程度上也破坏了基类的封装,基类的改变,对派生类有很大的影响。派生类和基类间的依赖关系很强,耦合度高
  3. 对象组合是类继承之外的另外有一种复用选择。新的更复杂的功能可以通过组装或组合对象来获得。对象组合要求被组合的对象具有良好定义的接口。这种复用风格被称为黑箱复用对象的内部细节不可见,组合之间没有很强的依赖关系,耦合度低优先使用对象组合有助于保持类的封装

3.1 继承和组合的应用场景?

一般根据不同关系来具体适用。

  1. 继承:适用于is-a关系,例如人和学生,动物和狗,车和奔驰车
  2. 组合:适用于has-a关系,例如人和鼻子,动物和爪,车和轮胎
  3. 综合考虑软件开发中,模块之间关系尽量保持:高内聚,低耦合,所以二者都可用的场景下,尽量用组合

总结

这里对文章进行总结:
以上就是今天总结的内容,本文包括了C++继承面试笔试题,分享给大家。
真?欢迎各位给予我更好的建议,欢迎访问!!!小编创作不易,觉得有用可以一键三连哦,感谢大家。peace
希望大家一起坚持学习,共同进步。梦想一旦被付诸行动,就会变得神圣。

欢迎各位大佬批评建议,分享更好的方法!!!???


网站公告

今日签到

点亮在社区的每一天
去签到