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

继承:

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

用法:

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.mfbz.cn/a/120398.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[动态规划] (十一) 简单多状态 LeetCode 面试题17.16.按摩师 和 198.打家劫舍

[动态规划] (十一) 简单多状态: LeetCode 面试题17.16.按摩师 和 198.打家劫舍 文章目录 [动态规划] (十一) 简单多状态: LeetCode 面试题17.16.按摩师 和 198.打家劫舍题目分析题目解析状态表示状态转移方程初始化和填表顺序 代码实现按摩师打家劫舍 总结 注:本题与…

iOS 让界面元素的文字随着语言的更改而变化——本地化文字跟随

在我的 App 内置的设置中,修改了语言,这时需要让当前界面的文本跟着改变语言。 解决方法是:添加一个观察者,观察 localize 本地语言的通知,然后一有变化就调用自定义的方法执行操作。(而设置中其实是改变了…

ZYNQ_project:key_beep

通过按键控制蜂鸣器工作。 模块框图: 时序图: 代码: /*1位按键消抖 */ module key_filter (input wire sys_clk ,input wire sys_rst_n ,input wire key_in ,output …

搭建嵌入式GDB调试环境以及VSCode+gdbserver 图形化调试

目录 1 搭建嵌入式gdb调试环境 1.1 交叉编译工具链自带的gdb和gdbserver 1.2 使用gdb进行嵌入式程序调试 1.2.1编写简单测试程序 1.2.2 gdb调试程序 1.3 源码编译gdb和gdbserver 1.3.1 下载gdb和gdbserver源码 1.3.2 编译gdb 1.3.3 移植gdbserver 2 VSCodegdbserver 图…

第十八章:Swing自述

18.1 Swing概述 18.2:Swing常用窗体 18.2.1:JFrame窗体 package eightth; import java.awt.*; //导入AWT包 import javax.swing.*; //导入Swing包 public class JFreamTest { public static void main(String args[]) { // 主方法 JFr…

阿里云99元服务器2核2G3M带宽_4年396元_新老用户均可

阿里云2核2G3M带宽99元服务器新老用户同享,续费不涨价,99元即可续费,可以续费到2027年,相当于396元买4年,阿里云百科aliyunbaike.com来详细说下阿里云99元服务器配置、购买条件、优惠价格和续费攻略: 阿里…

计算机毕业设计 基于SpringBoot的私人西服定制系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

【Python】Python爬虫使用代理IP的实现

前言 在爬虫的过程中,我们经常会遇到需要使用代理IP的情况。比如,针对目标网站的反爬机制,需要通过使用代理IP来规避风险。因此,本文主要介绍如何在Python爬虫中使用代理IP。 一、代理IP的作用 代理IP,顾名思义&…

flutter生态一统甜夏 @Android @ios @windowse @macos @linux @Web

(愿景)G o o g l e 中 国flutter生态一统天下(IT) @Web

网络安全入门必学内容

网络安全入门 必/学/内/容/ 随着时代的发展,经济、社会、生产、生活越来越依赖网络。而随着万物互联的物联网技术的兴起,线上线下已经打通,虚拟世界和现实世界的边界正变得模糊。这使得来自网络空间的攻击能够穿透虚拟世界的边界&#xff0…

YashanDB发布会圆满收官,V23.1三大新品引领国产数据库技术与应用突破!

11月8日,YashanDB 2023年度产品发布会在线上成功召开。本次产品发布会以“惟实励新”为主题,宣布崖山数据库系统YashanDB 内核能力、产品形态、生态创新全面升级,标志着YashanDB商业化进程又迈出了重要一步! 据了解,深…

企业电子招标采购系统源码之从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理

功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查看所…

java数据结构(红黑树)set集合 HashSet HashSet三个问题 LinkedHashSetTreeSet TreeSet集合默认规则排序规则

目录 数据结构(红黑树)红黑规则红黑树添加结点规则 set集合小结HashSet HashSet三个问题LinkedHashSet小结 TreeSetTreeSet集合默认规则排序规则(第一种排序方法)方式二练习 小练 总结总结 集合的使用应该怎么选择 数据结构(红黑树) 红黑规则 后代节点就是比如13根结点 13下面的…

opengauss权限需求

创建角色 "u_rts" 并授予对数据库 "rts_opsdb" 的只读权限: CREATE ROLE u_rts LOGIN PASSWORD Cloud1234; GRANT CONNECT ON DATABASE rts_opsdb TO u_rts; GRANT USAGE ON SCHEMA public TO u_rts; GRANT SELECT ON ALL TABLES IN SCHEMA pub…

网络安全(黑客)-零基础自学

想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全…

10-26 maven配置

打开idea 打开setting 基于Idea创建idea项目 加载jar包:(一般需要自己去手动加入,本地仓库是没有的)

Spring Cloud - 通过 Gateway webflux 编程实现网关异常处理

一、webflux 编程实现网关异常处理 我们知道在某一个服务中出现异常,可以通过 ControllerAdvice ExceptionHandler 来统一异常处理,即使是在微服务架构中,我们也可以将上述统一异常处理放入到公共的微服务中,这样哪一个微服务需要…

计算机网络基础知识1

1、tcp三次握手? SYN,标志位,用于建立TCP连接的握手过程中的标志位。 ACK,确认位,用于说明整个包是确认报文。 TCP/IP协议是传输层的一个面向连接提供可靠安全的传输协议。第一次握手有客户端发起,客户端向…

【EI会议征稿】第四届计算机网络安全与软件工程国际学术会议(CNSSE 2024)

第四届计算机网络安全与软件工程国际学术会议(CNSSE 2024) 2024 4th International Conference on Computer Network Security and Software Engineering 第四届计算机网络安全与软件工程国际学术会议(CNSSE 2024)将于2024年2月…

使用 Rust 进行程序

首先,我们需要安装必要的库。在终端中运行以下命令来安装 scraper 和 reqwest 库: rust cargo install scraper reqwest 然后,我们可以开始编写程序。以下是一个基本的爬虫程序,用于爬取 上的图片: rust use reqwe…
最新文章