从零开始的C++(十四)

news2024/11/25 1:49:47

继承:

作用:减少重复代码,简化程序。

用法:

class b:public a
{

 //...b中成员
}

在如上代码中,b类以public的方式继承了a类。规定a类是父类、基类,b类是子类、派生类。

关于继承方式:

包括public、portect、private

其中:public会保存父类成员原本的约束,如public修饰的成员仍是public,protect修饰得到仍是protec。  protect会把public约束的修改成protect约束,其余不变。 private会使得都是private约束。注:在父类中,受private约束的成员在子类中为不可见,无法使用也无法调用。

如果不加继承方式,class默认是private,struct默认是public。

赋值:

1.派生类的对象可以赋值给基类的对象、指针或引用,这叫切割、切片。

基类的对象不能赋值给派生类的对象。

基类的指针或引用可以通过强制类型转换的方式付给派生类的指针或引用,但是只有原本基类的指针指向派生类对象时才安全,不会出现越界访问。

作用域:

1.基类和派生类的作用域是独立的。

2.在基类和派生类中,如果出现重名的函数则会发生隐藏,即子类屏蔽父类的同名成员,这也叫重定义。此时要想访问父类中的该成员,则需要父类::父类成员来访问。

3.应注意对于同名函数,只要函数名相同就会被隐藏,无关参数列表和返回值。

默认成员函数:

1.如果父类无默认构造函数,则子类需要显示调用父类构造函数。

2.对于子类拷贝构造,需要显示调用父类拷贝构造。

3.子类赋值函数需要调用父类构造函数完成父类成员的赋值。

4.子类调用析构函数会自动调用父类析构函数。

5.对于子类,会先调用父类构造函数在调用子类构造函数,会先调用子类析构函数在调用父类析构函数。

6.由于子类和父类的析构函数会被编译器处理成同名函数destrutor(),因此父类和子类的析构函数会发生隐藏。

友元:

友元函数和友元类无法被继承。

静态成员:

静态成员相当于被子类和父类所共有,即仍是只有一份。

无法继承的类:

1.父类构造函数私有,此时子类无法显示调用父类构造函数,,因此无法构成继承。

2.加final修饰父类,此时规定该类无法被继承。

单继承:

子类只有一个直接父类。

多继承:

子类有两个及以上的直接父类。

菱形继承:

如图,此时b、c类继承a类,d类继承b类和c类,出现了菱形继承。

特点:d类中含有两份a类成员,一份从b类中继承来,一份从c类中继承来,会有二义性,即通过d类的对象访问a类的成员,无法确定是访问的b中继承来的还是c中继承来的。

解决方法:将b类和c类设置成虚继承,即b类和c类前加virtual。此时d类中只有一份a类的成员,b类继承来的那份a类变成一个指针,指针指向的空间存放当前距离d类中存放a类成员的地址的偏移量,c类中相同。

多态:

作用:同一个函数名,产生不同的效果。

产生条件:

1.继承关系

2.子类和父类中有虚函数,要求函数名、参数列表、返回值均一致。

3.父类的指针或引用调用该虚函数。

注:

1.父类中必须在虚函数前加virtual,子类可以不加virtual,此时仍可以构成多态。

2.子类和父类的返回值有些情况可以不同,比如返回值是父子类关系的指针和引用(可以是别的父子类)

3.析构函数只有是虚函数时才能正常使用,而不会发生隐藏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1186586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Tcl语言:SDC约束命令create_generated_clock详解(下)

相关阅读 Tcl语言https://blog.csdn.net/weixin_45791458/category_12488978.html?spm1001.2014.3001.5482 设定生成时钟特性 前文的末尾提到,当使用-divide by或-multiply_by选项创建生成时钟时,会根据master clock的时钟周期派生出生成时钟的周期&am…

【Java 进阶篇】Java Filter 快速入门

欢迎来到这篇有关 Java Filter 的快速入门指南!如果你是一名 Java 开发者或者正在学习 Java Web 开发,Filter 是一个强大的工具,可以帮助你管理和控制 Web 应用程序中的请求和响应。本文将向你解释 Filter 的基本概念,如何创建和配…

安全认证框架Shiro入门学习(shiro概述和shiro入门小案例);后续整合SpringBoot,应用程序安全;

权限概述 什么是权限 什么是权限 权限管理,一般指根据系统设置的安全策略或者安全规则,用户可以访问而且只能访问自己被授权的资源,不多不少。权限管理几乎出现在任何系统里面,只要有用户和密码的系统。 权限管理再系统中一般分…

小米6安装Ubuntu Touch系统也不是很难嘛

序言 这个文章是用来解说,小米6如何安装Ubuntu Touch系统 正文 安装这个系统需要注意的几点 1.手机必须已经解BL锁 2.没了 安装步骤 先双击打开压缩包查看,按照第一步第二步来进行执行,下面是解压图片 第一步 1.打开第一个文件夹 复制刷入rec的命令.txt里面的内容,然后打开红…

pytorch(小土堆)深度学习

第五节课讲项目的创建和对比 第六节:Dataset,Dataloader Dataset提供一种方式区获取数据及其label(如何获取每一个数据及其label,告诉我们总共有多少的数据) Dataloader为后面的网络提供不同的数据形式 第七节:Dataset类代码实战 显示图片 f…

挑战100天 AI In LeetCode Day05(热题+面试经典150题)

挑战100天 AI In LeetCode Day05(热题面试经典150题) 一、LeetCode介绍二、LeetCode 热题 HOT 100-72.1 题目2.2 题解 三、面试经典 150 题-73.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站,提供各种算法和数据结构的题目&am…

开源的全能维护 U 盘工具:Ventoy

开源的全能维护 U 盘工具:Ventoy 本篇文章聊聊迄今为止,我用着最舒服的一款开源 U 盘启动工具,Ventoy。 写在前面 好久不见,接下来计划写一个比较连续的内容,就先从最小的处着手吧。 经过长久的折腾,除…

Docker本地镜像发布到阿里云或私有库

本地镜像发布到阿里云流程 : 1.自己生成个要传的镜像 2.将本地镜像推送到阿里云: 阿里云开发者平台:开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云 2.1.创建仓库镜像: 2.1.1 选择控制台,进入容器镜像服…

Makefile 总述

目录 一、Makefile 里有什么? 1、显式规则 2、隐晦规则 3、变量的定义 4、文件指示 5、注释 二、Makefile 的文件名 三、引用其它的 Makefile 四、环境变量 MAKEFILES 五、make 的工作方式 一、Makefile 里有什么? Makefile 里主要包含了五个东…

Ps:图层蒙版的基本操作

点击图层蒙版缩览图选中图层蒙版之后,方可进行图层蒙版的操作。 反相蒙版 Invert 将图层蒙版上的白色转换为黑色,黑色转换为白色。 方法一: Ps菜单:图像/调整/反相 Adjustments/Invert 方法二: 快捷键:Ctrl…

window10单机部署hbase-2.5.5-hadoop3

一、介绍 hbase是什么,Hbase是一个分布式,可扩展,支持海量数据存储的noSQL数据库 二、下载hbase https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.5.6/ 三、配置hbase环境变量 三、修改hbase配置文件 在hbase-env.cmd添加如下配置…

【算法-链表2】反转链表 和 两两交换链表节点

今天,带来链表相关算法的讲解。文中不足错漏之处望请斧正! 理论基础点这里 反转链表 1. 思路 链表操作的本质是修改连接关系,本题我们需要反转链表,也就是每次都让当前节点的next指向自己的上一个。而题目给的是单链表&#xf…

Linux tail命令:显示文件结尾的内容

tail 命令和 head 命令正好相反,它用来查看文件末尾的数据,其基本格式如下: [rootlocalhost ~]# tail [选项] 文件名 此命令常用的选项及含义 【例 1】查看 /etc/passwd 文件最后 3 行的数据内容。 [rootlocalhost ~]# tail -n 3 /etc/passwd…

jmeter接口自动化部署jenkins教程

首先,保证本地安装并部署了jenkins,jmeter,xslproc 我搭建的自动化测试框架是jmeterjenkinsxslproc ---注意:原理是,jmeter自生成的报告jtl文件,通过xslproc工具,再结合jmeter自带的模板修改&…

Linux - 进程程序替换 - C/C++ 如何实现与各个语言之间的相互调用 - 替换环境变量

前言 我们之前利用 fork()函数来创建子进程,这种方式是 父子进程 共用一个代码,只是在代码当中使用了 if-else 语句来分流,达到父子进程运行不同的代码块的目的。但是其实本质上,还是父子共用一个代码和数…

C进阶-编译环境与预处理

本章重点: 程序的翻译环境 程序的执行环境 详解:C语言程序的编译链接 预定义符号介绍 预处理指令#define 宏和函数的对比 预处理操作符#和##的介绍 命令定义 预处理指令#include 预处理指令#undef 条件编译 1. 程序的翻译环境和执行环境 在ANSI C的任何一…

基层医院、民营医院、二级医院his系统源码,云计算技术B/S架构

在我国,基层医院和民营医院在总体数量上占据很大比例,但信息化水平普遍偏低。造成这一现状的原因有很多,如对信息化的重视度不够、缺乏足够的资金投入等,严重局限了自己在市场上对系统的选择面,而且难以保证有效的维护…

PDF Expert for mac(苹果电脑专业pdf编辑器)兼容12系统

PDF Expert是macOS平台上的一款优秀的PDF阅读和编辑工具,由Readdle公司开发。它不仅拥有方便、易用的界面,还具备诸多功能,比如编辑PDF文件、添加批注、填写表格、签署文件、合并文档等。安装:PDF Expert for Mac(PDF编辑阅读转换器)v3.5.2中…

Springer LaTeX 模板,及使用Texworks编译参考文献不显示问题

模板下载地址:Manuscripts with mathematical content can also be submitted in LaTeX. We recommend using Springer Nature’s LaTeX template. 下载的压缩包中包含以下文件: 使用Texworks打开.tex文件,生成的PDF有参考文献,但…

一个界面现代美观,色彩年轻化的Vue3+SpringBoot3前后端分离中后台管理脚手架

📚 在线文档 | ✨ 提交需求 | 🚀 演示地址(账号/密码:admin/admin123) 简介 ContiNew Admin (Continue New Admin)中后台管理框架/脚手架,持续以最新流行技术栈构建,拥…