继承 c++

2023-11-12

{

1.类的继承概念的解释

2.函数隐藏

3.赋值兼容

4.多种继承方式

5.函数的使用(构造函数,析构函数,拷贝构造函数,赋值运算符重载函数)

}

1.类的继承概念解释:
假定有一个类A,要创建一个新类B,它是类A的一个特殊版本。类A就称为基类,类B则称为派生类。类A是父,类B就是子。基类一般称为父类,派生类一般称为子类。派生类继承了基类的成员函数与成员变量(但有使用限制)

2.对于子类通常会有3种访问限定符:public protected private.

访问限定符是子类在使用父类成员函数或者成员变量的一种限定。

(1)当基类的访问限定符是public时,继承成员的访问状态不变。因此,继承的公共成员在派生类中是公共的,继承的守保护的成员是受保护的。

(2)当基类的访问限定符是protected时,继承的公共成员和受保护的成员在派生类中就是受保护的。

(3)当基类的访问限定符是private时,继承的公共成员和受保护成员都是派生类的私有成员,可以由派生类的成员函数访问,但如果在另一个派生类中继承他们,他们就是不能访问的。(可以被继承但是不能被访问)。

注:通常情况下,一般使用基类的成员变量为受protected),派生类的访问限定符为(public)。

2.函数隐藏

在继承中,子类与父类同时拥有函数名相同的两个函数,在此,我们只关心函数名是否相同,并不关心函数返回值,参数个数,参数类型的问题。我们称这两个函数构成函数隐藏。

当我们向要准确的调用其中一个函数时,我们需要增加作用域限定符来确保是否时我们想要调用的函数。

 3.赋值兼容

把子类赋值给父类时,存在切片。

 

 父类给子类进行赋值:

父类对象无法赋值给子类对象,但是对于引用与指针类型,可以通过强制类型转换进行赋值。

 

4.多种继承方式

(1)单继承

(2)多继承

(3)菱形继承

1>单继承

子类只继承一个父类,形成一对一的关系。

 

2>多继承

 

3>菱形继承

 菱形继承存在两个问题:
1.二义性:

如果我们在D类中想通过B类或者C类调用A类中的成员函数或者成员变量,会存在,编译器不知道我们想通过那个实现调用。

2.数据冗余

A类的数据被多次继承

解决方法:

在B和C类继承中加入virtual 关键字,就可以消除这两个问题。

实际上是,把A类中的数据放在一个公共位置(虚基表中),让其他的类在使用A类中的数据时通过查找相对地址(偏移量)去使用A类中的数据。

5.函数的使用

1.构造函数

(1)如果父类中没有写构造函数,那么在形成子类对象时,子类的会自己调用自己的构造函数(如果没有写则调用默认构造函数),子类中的父类成员会自动调用父类的默认构造函数。

(2)如果父类中有写构造函数,那么在形成子类对象时,子类的会自己调用自己的构造函数(如果没有写则调用默认构造函数),子类中的父类成员会自动调用父类的构造函数。

 

(3)如果想要在子类中对父类的数据初始化,要说明作用域即可。

未使用初始化列表的调用方式:

 使用初始化列表的方式:

 2.析构函数

1.当子类调用析构函数时,子类中的父类成员自动调用父类的析构函数(父类中没有写函数,就调用默认析构函数)。

子类中不需要显示完成父类的析构函数,这与构造函数有很大的区别。

原因:

如果显示调用,那么父类的析构函数将被调用两次,并且不能实现先调用子类的析构函数,再调用父类的析构函数。

3.拷贝构造函数

1.对子类进行拷贝构造时,如果父类没有写拷贝构造则调用默认拷贝构造函数,父类存在拷贝构造函数则调用父类的。

 4.赋值运算符重载函数

1.父类调用父类的,子类调用子类的,如果没有则调用默认的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

继承 c++ 的相关文章

随机推荐

  • 0x0000007B:A problem has been detected and windows has been shut down to prevent damage to your Comp

    0x0000007B 这个代码和硬盘有关系 不过不用害怕 不是有坏道了 是设置问题或者病毒造成的硬盘引导分区错误 如果您在用原版系统盘安装系统的时候出这个问题 那说明您的机器配置还是比较新的 作为老的系统盘 不认这么新的硬盘接口 所以得进B
  • ARKit和SceneKit

    ARKit SceneKit 首先看一下官方描述 学习ios开发真的要多看原文档 帮助很大 ARKit 整合iOS设备相机和运动功能 在您的应用程序或游戏中产生增强现实体验 SceneKit 使用高级场景描述创建3D游戏并将3D内容添加到应
  • 自学网络安全详细路线图来了

    大家好 我是轩辕 上一次的 C C 后端开发路线图 的末尾 预告了网络安全方向的学习路线 让大家久等了 今天终于来了 算上从学校开始学习 轩辕已经在网安这条路上走了10年了 无论是以前在学校做安全研究 还是毕业后在百度 360从事内核安全产
  • sklearn基础学习笔记

    本文对scikit learn中常用的class 和function做一个总结 一 sklearn cluster 聚类算法 class cluster KMeans n clusters init n init KMeans n clus
  • UML类图符号 各种关系说明以及举例

    转自 http www cnblogs com duanxz archive 2012 06 13 2547801 html UML中描述对象和类之间相互关系的方式包括 依赖 Dependency 关联 Association 聚合 Agg
  • 网络安全基础要点知识介绍

    本文章只为了方便查阅 文章目录 网络安全 网络安全问题概述 两类密码体制 数字签名 鉴别 报文鉴别 实体鉴别 密钥分配 对称密钥的分配 公钥的分配 互联网使用的安全协议 运输层安全协议 参考文献 网络安全 网络安全问题概述 计算机网络的通信
  • 真题详解(数字签名算法)-软件设计(七十八)

    真题详解 有限自动机 软件设计 七十七 https blog csdn net ke1ying article details 130748759 可用于数字签名算法的是 答案 非对称RSA 移植性 易安装 易替换 适应性 UML状态图转换
  • P16-Login.vue内容

  • Java 中时间类 Calendar、Date、SimpleDateFormat 的相关详解

    参考Java 1 8 文章目录 java util Date methods java util Calendar methods Calendar 方法举例 java text SimpleDateFormat 符号对应的意思 构造方法
  • vue实现一行多列的表单校验

    背景 在开发过程中 经常会遇到一行多列的情况 并且需要做表单校验 element文档给的required案列是单列输入框 使用场景不符合动态一行多列验证 第一种方式 一个表单 循环多行 代码
  • redis模糊批量清除key

    文章目录 一 命令行删除 二 golang代码删除 有时候需要从 Redis 实例成千上万的 key 中找出特定前缀的 key 列表来手动处理数据 可能是修改它的值 也可能是删除 key 这里就有一个问题 如何从海量的 key 中找出满足特
  • 三维偏序(陌上花开)

    题目描述 题解 这是cdq分治模板题 前置 cdq分治 好像是一位大佬搞出来的神奇分治 可以直接干掉一层树形结构 其实实现还是比较简单的 对于区间 l r 我们先处理 l mid 和 mid 1 r 然后处理左右区间之间产生的影响 具体顺序
  • 华为OD机试 - 战场索敌(Java & JS & Python)

    题目描述 有一个大小是N M的战场地图 被墙壁 分隔成大小不同的区域 上下左右四个方向相邻的空地 属于同一个区域 只有空地上可能存在敌人 E 请求出地图上总共有多少区域里的敌人数小于K 输入描述 第一行输入为N M K N表示地图的行数 M
  • 成功解决 -- An I/O error occured while sending data to the backend.

    文章目录 问题描述 历史经验 排查步骤 解决方法 问题描述 Oracle通过kettle工具同步数据到Gauss报IO错误 历史经验 应用侧 获取连接后未及时关闭 DriverManager gerConnection后未调用con clo
  • 如何查看list的维度

    在写神经网络代码过程中 总是有很多的矩阵变换 有很多时候矩阵是有list构成的 然而list又没有shape方法 无法直接查看list的维度 通过查找资料 我看到可以使用将其转化为数组的形式查看维度 代码如下 import numpy as
  • Tkinter 控件详细介绍

    Tkinter支持15个核心的窗口部件 这个15个核心窗口部件类列表如下 窗口部件及说明 Button 一个简单的按钮 用来执行一个命令或别的操作 Canvas 组织图形 这个部件可以用来绘制图表和图 创建图形编辑器 实现定制窗口部件 Ch
  • 远程桌面端口默认是什么?修改远程桌面端口号方法

    远程桌面连接是我们控制远程电脑的高效方法 远程桌面连接也是需要使用端口的 下面我们一起来学习一下远程桌面连接默认的端口号及服务器端远程端口号的修改方法 推荐 服务器远程桌面端口修改工具 远程桌面端口默认是什么 远程桌面连接的默认端口号是 3
  • C语言实现简易扫雷小游戏

    game h include
  • Linux下编译CEF源码及交叉编译

    Linux下编译CEF chromium源码及交叉编译 官方编译文档 https bitbucket org chromiumembedded cef wiki MasterBuildQuickStart markdown header l
  • 继承 c++

    1 类的继承概念的解释 2 函数隐藏 3 赋值兼容 4 多种继承方式 5 函数的使用 构造函数 析构函数 拷贝构造函数 赋值运算符重载函数 1 类的继承概念解释 假定有一个类A 要创建一个新类B 它是类A的一个特殊版本 类A就称为基类 类B