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

关于继承的一些知识(C++)

当我们想要设计几个类分别记录老师,学生的个人信息时会发现,像姓名、地址、身份证号、电话等等记录基础信息的成员变量是都具有的,重复定义会显得冗余,但同时它们两者又具有不同的记录信息的成员变量,像学生需要记录学号,老师需要记录职称,以及不同的成员函数。

可以想个办法,比如将重复的部分单独拎出来,都写在一个类里,然后不同的部分就继承这个类成为一个类,这样的新类就叫做子类(派生类)

继承定义

访问限定符与继承方式一起,总共有9种组合方式

继承方式分为三种

public继承、protected继承、private继承

访问限定符分为三种

public访问、protected访问、private访问

不可见的意思是,基类的私有成员在派生类里是用不了的

但是有间接的方式,可以借助父类的公有成员函数进行使用

记忆方式:访问限定符 取 继承方式和基类的访问限定符小的那个

如果是class,不写继承方式默认就是私有继承

如果是struct,不写继承方式就是默认是公有继承

继承类模板

基类是模板需要实例化,按需实例化,不能直接使用,需要指定类域

因为当派生类实例化时,基类也会被实例化,但由于基类是模板类型,所以成员函数并未实例化,所以找不到

派生类可以是模板类或者非模板类

当是模板类时,派生类可以继承基类模板所以特化版本

当是非模板类时,派生类只能继承基类模板的某个特定实例,这种情况下,派生类在继承时需要指定基类模板的参数,实例化一个具体的基类

基类和派生类的转换

不同类型的对象进行赋值时,会因为类型不同发生类型转换,过程中会出现临时对象,所以引用加类型转换需要加上const(临时对象具有常性)

在public继承中,就有个特殊的例外,派生类对象可以直接赋值给基类的指针或者引用,而不需要加const,因为没有产生临时对象,给的直接是派生类里父类的那一部分

如果是赋值 父=子的形式,就是通过基类的拷贝构造或赋值重载完成,需要进行切割,将子类的自己定义的部分切掉

隐藏

派生类和基础类是可以有同名成员的,如果派生类有与基类函数名相同的成员函数(没有使用virtual关键字)或者相同名字的成员变量,基类的同名成员函数或成员变量将会被隐藏

这意味着在派生类对象上调用该函数时,将调用派生类中的版本,而不是基类中的版本。如果需要调用基类中的被隐藏函数,可以使用作用域解析运算符 :: 来显式指定调用基类中的函数。

派生类的默认成员函数

跟普通类的规则高度相似

分成两个部分分开处理:

1、基类成员(当成整体,调用基类构造)

2、派生类成员(跟普通类一样)

在C++中,当创建一个派生类的对象时,为了确保基类的成员被正确初始化,派生类的构造函数必须显式地调用基类的构造函数。这是因为构造函数不能被继承,所以派生类需要负责初始化其基类的部分

如果允许构造函数被继承,可能会导致初始化顺序的问题。派生类的构造函数需要在初始化派生类成员之前先初始化基类成员,如果构造函数可以被继承,那么这种初始化顺序将无法保证

http://www.lryc.cn/news/606854.html

相关文章:

  • visual studio 2015 编写C++ 静态库和动态库、调用静态库和动态库
  • C++--多态
  • 20257月29日-8月2日训练日志
  • 软件测试测评公司关于HTTP安全头配置与测试?
  • 用 Ubuntu 22.04 (Jammy) 的 MongoDB 源
  • Java 学习笔记:常用类、String 与日期时间处理
  • 新手小白做一个简单的微服务
  • oracle的安全加密有哪些?
  • Linux基础 -- 内核快速向用户态共享内核变量方案之ctl_table
  • 编程与数学 03-002 计算机网络 17_云计算与网络
  • 无人设备遥控器之多设备协同技术篇
  • Java,八股,cv,算法——双非研0四修之路day22
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘altair’问题
  • 【Leetcode hot 100】1.两数之和
  • 切比雪夫不等式
  • qcustomplot 大量数据拖拽卡顿,开启opengl
  • SketchUp扩展工具分享:Ropefall v1.02插件轻松实现绳索模拟
  • 1、【C语言】【进阶】数组,指针与退化
  • 函数fdopendir的用法
  • [vue3 echarts] echarts 动态数据更新 setInterval
  • 深度学习(鱼书)day08--误差反向传播(后三节)
  • 轻钢屋顶电动排烟窗(工业用)
  • ansible.cfg 配置文件的常见配置项及其说明
  • SQL中的HAVING用法
  • MySQL--组从复制的详解及功能演练
  • 从O(n²)到O(n log n):深度剖析快速排序的内存优化与cache-friendly实现
  • 高级11-Java日志管理:使用Log4j与SLF4J
  • Oracle EBS 缺少adcfgclone.pl文件
  • 电商前端Nginx访问日志收集分析实战
  • 汇川ITS7100E触摸屏交互界面开发(一)调试事项说明