当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C++继承

C++继承

2020年07月31日  | 移动技术网IT编程  | 我要评论


继承是面向对象的三大特性:封装、继承、多态之一

继承的概念


我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。
这个时候我们就可以考虑利用继承的技术,减少重复代码。

继承的好处:可以减少重复的代码( 后续文章还有多态等好处)

class A : public B;

A 类称为子类 或 派生类

B 类称为父类 或 基类

派生类中的成员,包含两大部分

一类是从基类继承过来的,一类是自己增加的成员。

从基类继承过过来的表现其共性,而自己本身子类新增的成员体现了其个性。

继承的总结性

继承的语法:class 子类 : 继承方式 父类

继承方式一共有三种:

  • 公共继承
  • 保护继承
  • 私有继承

在这里插入图片描述
1、父类的共有继承,保护继承,才可被子类继承。父类的私有子类继承不了。

2、按照子类继承的顺序,按照等级私有继承>保护继承>共有继承,为准,级别越来越低。

3、访问权限:共有的属性可以被类外和任何类访问;父类保护的属性子类可以访问;私有的属性必须要在本类内访问(级别最高)。
4、 父类中私有成员也是被子类继承下去了,只是由
编译器给隐藏后访问不到
。(子类占用内存=自己的成员属性内存+父类的所有属性内存)

5、继承中先调用父类构造函数,再调用子类构造函数,析构顺序与构造相反。(栈区先进后出

6、父子同名成员时(非静态成员
(1)子类对象可以直接访问到子类中同名成员(默认是直接访问子类的
(2)子类对象加作用域可以访问到父类同名成员
(3)当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数

7、继承中同名的静态成员(static)在子类对象时(静态成员)(静态是在另外的存储区域****,编译阶段就准备好了,大家共用的,用到了的话直接复制出来到堆用)
(1)同名静态成员处理方式和非静态处理方式一样,只不过有两种访问的方式(通过对象 和 通过类名)通过对象,和上面6是一样的。
(2)通过类名,Son::Base::func();第一个冒号表示是在子类类名访问,第二个冒号是在子类继承的父类作用域中。

8、C++允许一个类继承多个类
语法:class 子类 :继承方式 父类1 , 继承方式 父类2...
多继承可能会引发父类中有同名成员出现,需要加作用域区分
C++实际开发中不建议用多继承
总结: 多继承中如果父类中出现了同名情况,子类使用时候要加作用域

9、菱形继承问题:

菱形继承概念:
两个派生类继承同一个基类
​ 又有某个类同时继承者两个派生类
​ 这种继承被称为菱形继承,或者钻石继承

描述:孙子继承儿子1和儿子2,儿子1和儿子2又继承父亲。(并且此时有相同的成员属性)

为什么不用:此时会产生二义性,浪费空间,没意义,孙子同时继承了儿子1和儿子2的属性。实际只需要一份数据,不需要两份数据。

解决:使用虚继承来解决。(继承父亲前加上修饰virtual

在这里插入图片描述
对应有个指针指向虚继承表。

本文地址:https://blog.csdn.net/m0_46332224/article/details/107679629

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网