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

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

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

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

继承定义

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

继承方式分为三种

public继承、protected继承、private继承

访问限定符分为三种

public访问、protected访问、private访问

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

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

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

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

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

继承类模板

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

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

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

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

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

基类和派生类的转换

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

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

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

隐藏

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

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

派生类的默认成员函数

跟普通类的规则高度相似

分成两个部分分开处理:

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

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

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

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

http://www.dtcms.com/a/309169.html

相关文章:

  • react-native在mac的m2芯片下,pod install安装glog的时候报错
  • bmcweb工作流程
  • 【科研绘图系列】R语言绘制环状分组显著性柱状堆积图
  • Spring AI 系列之三十 - Spring AI Alibaba-其它模型
  • CSS font-weight:500不生效
  • Git 命令使用指南:从入门到进阶
  • 动态规划(数位统计dp 状态压缩dp 树形dp 记忆化搜索) from y总
  • 【C语言】字符函数与字符串函数详解
  • http请求访问响应慢问题解决的基本思路
  • 基于python大数据的招聘数据可视化及推荐系统
  • natapp的报错Tunnel StatusReconnecting...
  • STM32芯片简述
  • 使用GPU和NPU视频生成的优劣对比
  • 人工智能与金融:金融服务的重塑
  • Linux9 root密码修改
  • armbian 启用nginx并设置访问密码
  • CTF实战:用Sqlmap破解表单输入型SQL注入题(输入账号密码/usernamepassword)
  • SpringBoot AI应用实战:从图像识别到预测分析
  • 【通用视觉框架】基于OpenCvSharp+WPF+YOLO开发的仿VisionMaster的通用视觉框架软件,全套源码,开箱即用
  • 机器人芯片:智能机器的“大脑”与未来趋势
  • Nature Machine Intelligence 面向机器人操作有效滑移控制的仿生轨迹模块
  • alaxea机器人由星海图人工智能科技有限公司研发的高性能仿人形机器人
  • 【LeetCode 热题 100】155. 最小栈
  • PL-0功能拓展及基于VSCode的IDE配置
  • kotlin语法和特性分析
  • PDFsam免费开源!PDF分割合并工具
  • 华为数通HCIP
  • 为什么我们需要提示词增强工程PEE(Prompt Enhancement Engineering )
  • axios请求的取消
  • ICML 2025 | 深度剖析时序 Transformer:为何有效,瓶颈何在?