当前位置: 首页 > news >正文

C++基础知识学习记录—继承

1、继承

1、继承就是在一个已经存在的类的基础上,建立一个新的类,新的类拥有已存在的类的

特性。

2、继承是面向对象的三大特性之一,体现的是代码复用的思想。

3、已存在的类被称为“基类”、“父类”、“超类”

4、新创建的类被称为“派生类”、“子类”

注意:

1、如果子类中重定义了父类中同名的函数,会把父类中同名函数隐藏。访问时默认是子

类中的方法。可以通过父类加作用域限定符的方式访问父类中被隐藏的方法

2、基类的私有成员可以继承给派生类,但是访问比较受限。

2、继承中的构造函数

1、派生类的构造函数

值得注意的是:

1、构造函数和析构函数不能被继承,派生类的所有构造函数都必须调用基类的一个构造函数,才能实现属性的初始化。

2、默认情况下,编译器会自动在派生类的构造函数中调用基类的无参构造函数,

如果父类中没有无参的构造函数,就会报错

2、派生类调用基类构造函数

1、因为构造函数和析构函数,不能继承,所以需要在派生类中调用基类的构造函数,来实现部分属性的初始化

2、派生类调用基类的构造函数有三种形式:透传构造、委托构造与继承构造

1、透传构造

在派生类中直接调用基类的构造函数,这种调用方式就是透传构造,透传构造的执行效率相对较高。

2、委托构造

委托构造的思想:一个类中的构造函数可以调用这个类中的另一个构造函数。委托构造的优点是代码的可维护性好但是指向效率相比透传效率低。

 

3、继承构造(推荐使用)

C++11新增特性,可以通过一句话自动实现透传构造,即编译器自动为派生类添加n(n为基类的构造函数个数)个构造函数,并且每个派生类的构造函数都自动透传到参数相同的基类构造函数。最简便的写法。

3、对象的构建和销毁的过程

1、当类中有对象成员时

当类中的属性是个对象时,这个属性称为对象成员。

先调用对象成员的构造函数,在调用类自己类的构造函数,析构函数相反

2、父子类继承时

构造函数先父类再子类,析构函数相反,先子类后父类

3、对象创建和销毁的过程总结:(分析如下类的创建和销毁过程)

1、非静态成员对象,先调用对象成员的构造函数,在调用自己类的构造函数,析构函数相反。

2、静态成员在程序运行时创建,程序结束时销毁

3、父子继承时,构造函数先父后子,析构函数,先子再父。

4、多继承

1、多重继承的概念

C++中规定,继承可以有多个基类,这样的继承就是多重继承,多重继承中每一个继承 都可以看作是一个单独的独一继承。

2、多重继承可能出现的问题(了解)

1、多个基类具有重名成员

在进行多重继承时,基类中的成员有 相同名称 的情况下,在通过子类调用时,就会造成无法确定调用来自哪个基类的问题。

解决方案:

使用作用域运算符限定成员名称

语法:

对象名.类名::成员

2、菱形继承(钻石继承)

解决方式1:

使用作用域运算符限定成员名称

对象名.基类名::成员名

解决方式2:虚继承(了解)

1、虚继承是C++中 一种继承机制。继承有普通继承和虚继承两种方式,默认就是普通继承,如果要用虚继承,需要在继承方式里加上关键字virtual。

2、通过虚继承方式,关键字virtual这时就只会从最上层基类获得一份数据,避免了二义性问题。虚继承编译器内部做了相应处理,所以这种方式比普通继承方式效率低。

3、虚继承实现的原理:

虚继承实现的原理主要通过虚基类指针与虚基类表实现,每个虚继承的派生类(Sofa类与Bed类)内部都会有一个虚基类指针和虚基类表。

虚基类指针指向虚基类表,虚基类表中记录二义性函数的地址,虚基类指针可以继续继承到派生类中(SofaBed类),但是虚基类表只会在原有类(Sofa类与Bed类)中。虚基类指针实际上是一个隐藏的成员变量,会伴随着对象存在,当对象调用二义性内容时,通过查表解决此问题。

5、权限

1、三种权限修饰符的继承

C++中可以给类中的内容设置权限,以达到不同的访问性,在之前的课程中主要使用了public与private两种权限,另外还有第三种权限:protected,protected访问性介于二者之间。

2、三种权限修饰符的继承

继承的方式有三种:public公有继承 protectd受保护继承 private私有继承

最常用的是public继承

不管哪种继承方式,基类中私有的内容,在子类中都不能直接访问

1、公有继承(最常用)

公有继承下,派生类可以继承基类的成员,基类的私有成员可以继承给派生类,但是访问比较受限(比较特殊,基本不受本节内容影响)。基类的公有和保护成员继承到派生类中仍然作为派生类的公有和保护成员。

2、保护继承

保护继承下,派生类可以继承基类的成员,基类的私有成员可以继承给派生类,但是访问比较受限(比较特殊,基本不受本节内容影响)。基类的公有和保护成员继承到派生类中都变为派生类的保护成员。

3、私有继承

私有继承下,派生类可以继承基类的成员,基类的私有成员可以继承给派生类,但是访问比较受限(比较特殊,基本不受本节内容影响)。基类的公有和保护成员继承到派生类中都变为派生类的私有成员。

相关文章:

  • R语言NIMBLE、Stan和INLA贝叶斯平滑及条件空间模型死亡率数据分析:提升疾病风险估计准确性...
  • 使用Python中的`gensim`库构建LDA(Latent Dirichlet Allocation)模型来分析收集到的评论
  • 【精调】LLaMA-Factory 快速开始1: Meta-Llama-3.1-8B-Instruct
  • 免费体验,在阿里云平台零门槛调用满血版DeepSeek-R1模型
  • 使用机器学习算法进行大数据预测或分类的案例
  • zero自动化框架搭建---Git安装详解
  • 基于ffmpeg+openGL ES实现的视频编辑工具-解码(四)
  • 设计模式教程:享元模式(Flyweight Pattern)
  • golang访问google sheet 写接口
  • LVGL在VScode中安装模拟器运行配置笔记教程
  • 基于Java+SpringBoot+Vue的前后端分离的汽车租赁系统
  • 深入理解指针
  • Xshell连接虚拟机ubuntu,报错(port 22): Connection failed.
  • Oracle RAC数据库单节点轮流重启
  • 解析京东商品评论API接口 ——json数据示例参考
  • 第四篇:开源生态与蒸馏模型的价值
  • LLaMA 3.1 模型在DAMODEL平台的部署与实战:打造智能聊天机器人
  • Java IO 流核心技术全解析
  • 第二章 代码生成
  • 【深度学习】预训练和微调概述
  • 宁波网站推广优化公司电话/竞价推广和seo的区别
  • 做网站卖专业卖文玩/想建立自己的网站
  • 毕业设计做网站 服务器怎么弄/竞价代运营公司
  • 东莞微网站建设公司/网络推广网站公司
  • 网站外链/鸡西网站seo
  • 建设政府网站的作用/今日新闻联播主要内容摘抄