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

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

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

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

继承定义

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

继承方式分为三种

public继承、protected继承、private继承

访问限定符分为三种

public访问、protected访问、private访问

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

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

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

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

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

继承类模板

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

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

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

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

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

基类和派生类的转换

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

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

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

隐藏

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

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

派生类的默认成员函数

跟普通类的规则高度相似

分成两个部分分开处理:

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

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

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

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

http://www.xdnf.cn/news/16763.html

相关文章:

  • 层次聚类:无需“猜”K值,如何让数据自己画出“家族图谱”?
  • 深度学习-梯度爆炸与梯度消失
  • 笔试——Day25
  • 深度解读 CSGHub:开源协议、核心功能与产品定位
  • Java:JWT 从原理到高频面试题解析
  • Agents-SDK智能体开发[2]之工具调用
  • Web开发-PHP应用TP框架MVC模型路由访问模版渲染安全写法版本漏洞
  • Mysql group by
  • 机器学习第二课之逻辑回归(二)LogisticRegression
  • 链表【各种题型+对应LeetCode习题练习】
  • 力扣-最大单词长度乘积
  • macOS卸载.net core 8.0
  • PL-0功能拓展及基于VSCode的IDE配置
  • uniapp无线(WIFI)运行调试APP(真机)
  • 脚本统计MongoDB集合表数据量
  • SSL 剥离漏洞
  • Java 日期时间处理:分类、用途与性能分析
  • 在Centos7中安装gitlab
  • 常见小目标检测算法优化
  • 机器学习:开启智能时代的钥匙
  • TypeScript SDK 升级:通过 Upload Relay 赋能更多应用
  • 第十四天:C++内存管理
  • 汽车供应链PPAP自动化审核指南:如何用AI实现规则精准匹配与文件智能校验
  • cesium FBO(四)自定义相机渲染到Canvas(离屏渲染)
  • 数据处理四件套:NumPy/Pandas/Matplotlib/Seaborn速通指南
  • ACM SIGCOMM 2024论文精选-01:5G【Prism5G】
  • Docker设置容器时间
  • 深度学习(鱼书)day08--误差反向传播(后三节)
  • PyTorch基础——张量计算
  • datax-cloud 智数通修订版(去除mapstruct)本地部署-记录