欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++继承

程序员文章站 2022-03-10 10:32:43
C++继承总结一级继承的概念继承的总结性继承是面向对象的三大特性:封装、继承、多态之一一级继承的概念我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这个时候我们就可以考虑利用继承的技术,减少重复代码。继承的好处:可以减少重复的代码( 后续文章还有多态等好处)class A : public B;A 类称为子类 或 派生类B 类称为父类 或 基类派生类中的成员,包含两大部分:一类是从基类继承过来的,一类是自己增加的成员。从基类继承过过来的表现其共性,而自己本身...


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

继承的概念

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

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

class A : public B;

A 类称为子类 或 派生类

B 类称为父类 或 基类

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

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

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

继承的总结性

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

继承方式一共有三种:

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

C++继承
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

C++继承
对应有个指针指向虚继承表。

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

相关标签: c++学习