C++:多态、模板

一、多态

相同的代码、实现不同的功能

1.前提

1.类之间有继承关系

2.父类中有虚函数

3.父类的指针指向子类的对象

2.函数重写

1.发生在继承之间

2.父类中有虚函数

3.子类中对父类的虚函数重新实现

3.虚函数

1.在函数头前加上virtual

2.只要基类中的函数是虚函数,后面所有派生类中的该函数都是虚函数

3.如果在派生类中对基类中的虚函数进行了重新定义,该行为被称为函数重写

4.如果父类指针,指向子类的对象,可以调用出子类重写后的虚函数

5.只要类中存在虚函数,类中就会提供一个虚指针和虚函数表,(虚指针指向虚函数表)

1.虚函数表:用于保存所有虚函数的入口地址,只要类中有虚函数就会有一张对应的虚函数表

2.虚函数表的特点,会根据继承关系不断更新

3.虚指针:存放在类中的起始地址上,指向类的虚函数表,虚指针只有一个子类的虚指针是从父类中继承下来的

4.静态多态和动态多态

静态多态(编译时多态):函数重载 ------>在编译阶段中就已经区分不同的函数了

动态多态(运行时多态):基于继承的多态 ------>在代码运行时完成对不同功能的区分

二、纯虚函数

1.虚函数:在函数头前面加上virtual关键字

2.纯虚函数:在函数头前面加上virtual关键字,并且没有函数体直接=0

   格式:virtual 返回值 函数名(参数列表)=0;

三、抽象类

1.包含纯虚函数的类就是抽象类

2.抽象类不允许实例化对象,只表示一个公共的属性

3.如果父类中包含纯虚函数,并且子类中没有对该纯虚函数重写,那么子类也是一个抽象类

四、模板

1.模板函数

template <typename T> //T就是一个模板,可以是任意类型

template:定义模板的关键字

<typename T>:模板提供的数据类型

2.模板函数的实现

2.1自动推导模板类型

模板只对紧跟在后面的第一行代码有效,如果后面还想定义模板函数需要重新定义模板

2.2 手动显性调用模板

无法通过函数的参数,推导出所有的模板类型

显性调用模板函数的格式:

函数名<数据类型1,数据类型2......>(参数);

五、异常处理

1.throw

在可能发生异常的位置,提前抛出异常

throw 数据类型(值);

2.try。。。 catch。。。

throw用于抛出异常,try尝试接收异常并进行相应的处理

try{}中的存放可能发生异常的代码,接收到throw抛出的异常,但是只能接收一次,所以建议try中只存放一条语句

catch对try获取到的异常进行处理,可以对数据类型处理,也可以对数据的值处理

作业

1.使用模板类,实现顺序栈

​
#include <iostream>using namespace std;
template<typename T>
class Seq{
public:T *data;    //数据int top;     //栈顶指针int maxsize;//栈容量//分配空间Seq(int maxsize);//释放空间~Seq();//入栈void push(T data);//出栈void pop();//展示栈中元素void show();//判满bool full();//判空bool empty();};template<typename T>
//分配空间
Seq<T>::Seq(int maxsize):maxsize(maxsize),top(-1){data=new T[maxsize];
}template<typename T>
//释放空间
Seq<T>::~Seq(){}template<typename T>
//入栈
void Seq<T>::push(T value){if(!full())data[++top]=value;
}template<typename T>
//出栈
void Seq<T>::pop(){if(!empty()){T temp=data[top--];cout<<"出栈元素为"<<temp<<endl;}
}template<typename T>
//展示栈中元素
void Seq<T>::show(){cout<<"栈中元素为: ";for(int i=0;i<=top;i++){cout<<data[i]<<" ";}
}template<typename T>
//判满
bool Seq<T>::full(){return top==maxsize;
}template<typename T>
//判控
bool Seq<T>::empty(){return top==-1;
}int main()
{Seq <int>s(10);s.push(10);s.push(20);s.push(30);s.pop();s.show();
}​

2.写一个char类型的字符数组,对该数组访问越界时抛出异常,并做处理。

#include <iostream>
#include <cstring>
using namespace std;int fun(int a,int len){if(a>len-1){throw int();}cout<<"下标为"<<a<<endl;
}
int main()
{int a;cout<<"请输入下标位置"<<endl;cin>>a;char arr[32]="hello";int len=strlen(arr);try{fun(a,len);}catch(int){cout<<"越界访问"<<endl;
}return 0;
}

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

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

相关文章

MyBatis-Plus04(条件构造器)

条件构造器和常用接口 wrapper介绍 Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 AbstractWrapper &#xff1a; 用于查询条件封装&#xff0c;生成 sql 的 where 条件 QueryWrapper &#xff1a; 查询条件封装 UpdateWrapper &#xff1a; Update 条件封装 A…

如何在Ubuntu系统使用Nextcloud+Cpolar搭建可公网访问私人专属网盘

文章目录 1. 安装Docker2. 使用Docker拉取Nextcloud镜像3. 创建并启动Nextcloud容器4. 本地连接测试5. 公网远程访问本地Nextcloud容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛…

穿什么有这么重要?--装饰模式

1.1 穿什么有这么重要&#xff1f; 约会穿什么&#xff1f; "那要看你想给人家什么印象&#xff1f;是比较年轻&#xff0c;还是比较干练&#xff1b;是比较颓废&#xff0c;还是要比较阳光&#xff1b;也有可能你想给人家一种极其难忘的印象&#xff0c;那穿法又大不一样…

10秒钟用python接入讯飞星火API(保姆级)

正文&#xff1a; 科大讯飞是中国领先的人工智能公众公司&#xff0c;其讯飞星火API为开发者提供了丰富的接口和服务&#xff0c;以支持各种语音和语言技术的应用。 步骤一&#xff1a;注册账号并创建应用 首先&#xff0c;您需要访问科大讯飞开放平台官网&#xff0c;注册一个…

谷歌google广告和必应Bing广告,是否二选一?

搜索引擎广告凭借其精准定向、高度可见性和高效转化能力&#xff0c;成为众多企业拓展海外市场、提升品牌影响力的重要手段。其中&#xff0c;谷歌Google与必应Bing作为全球两大主流搜索引擎&#xff0c;各自拥有庞大的用户群体与独特的市场优势。面对这两大广告平台&#xff0…

非关系型数据库(缓存数据库)redis的高可用(持久化)

目录 1.redis的高可用 2.Redis持久化 1.Redis 提供两种方式进行持久化 2.RDB持久化 2.1触发条件 2.1.1手动触发 2.1.2自动触发 2.1.3其他自动触发机制 2.2执行流程 ​编辑 2.3 启动时加载 3.AOF持久化 3.1开启AOF 3.2 执行流程 3.2.1append——命令追加 3.…

Crossmanager 2024 64 bit(CAD文件格式转换工具)安装包分享

新增功能 1、NavisWorks输入&#xff1a;首次发布&#xff0c;支持2016至2023版本 2、Fusion 360输入&#xff1a;首次发布&#xff0c;支持版本2.0 3、Catia V6/3D体验输入&#xff1a;支持R2023x版本 4、Solidworks输入&#xff1a;支持Solidworks 2023版本 5、Solid Ed…

《QT实用小工具·八》数据库通用翻页类

1、概述 源码放在文章末尾 该项目实现数据库通用翻页类&#xff0c;主要包含如下功能&#xff1a; 1:自动按照设定的每页多少行数据分页 2:只需要传入表名/字段集合/每页行数/翻页指示按钮/文字指示标签 3:提供公共静态方法绑定字段数据到下拉框 4:建议条件字段用数字类型的主…

机器学习 | 线性判别分析(Linear Discriminant Analysis)

1 机器学习中的建模 1.1 描述性建模 以方便的形式给出数据的主要特征&#xff0c;实质上是对数据的概括&#xff0c;以便在大量的或有噪声的数据中仍能观察到重要特征。重在认识数据的主要概貌&#xff0c;理解数据的重要特征。 Task&#xff1a;聚类分析&#xff0c;数据降…

C++类和对象第三讲总结

1.对象指针&#xff1a;指针->成员 // 指针存放了对象的地址 // 指针作为函数参数&#xff0c;可以真正改变对象成员的值 // 指针可以指向对象数组&#xff0c;它存放了数组首元素地址 // 指针偏移量可以访问数组的每个对象 2.一个练习案例 使用指针和对象数组打印…

【数学公式大全整理——1.0】

导数公式 积分表 万能公式 初等函数 重要极限 ### 诱导公式 和差角 和差化积 倍角公式 半角公式 正弦 余弦定理 反三角函数 高阶求导公式

数据库系统概论(超详解!!!) 第三节 关系数据库标准语言SQL(Ⅳ)

1.集合查询 集合操作的种类 并操作UNION 交操作INTERSECT 差操作EXCEPT 参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同 查询计算机科学系的学生及年龄不大于19岁的学生。SELECT *FROM StudentWHERE Sdept CSUNIONSELECT *FROM StudentWHERE Sage&l…

Kubernetes(k8s):部署、使用 metrics-server

Kubernetes&#xff08;k8s&#xff09;&#xff1a;部署、使用 metrics-server 一、metrics-server简介二、部署metrics-server2.1、 下载 Metrics Server 部署文件2.2、修改metrics-server.yaml 文件2.3、 部署 Metrics Server2.4、 检查 Metrics Server 三、使用 Metrics Se…

网络升级固件

资源信息 可知 &#xff1a; install\soc_cv1800b_milkv_duo_sd\boot.sd文件较设备中的同名文件多了128个字节的文件头&#xff1b;install\soc_cv1800b_milkv_duo_sd\rawimages\boot.sd文件与设备中同名文件相同&#xff1b; 环境搭建 服务器 启动TFTP服务 安装TFTP服务器…

windows下通过vscode访问ubuntu(绝大部分Linux下开发所采用的方案)

前言 本篇博客是介绍VSCode远程连接Ubuntu进行开发的解决方案&#xff0c;前提是安装好了VMWare&#xff0c;Ubuntu&#xff0c;windows下的VSCode。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关…

深信服:借助观测云实现全链路可观测性

导读 深信服科技股份有限公司 简称「深信服」&#xff08; Sangfor Technologies Inc. &#xff09;&#xff0c;是一家领先的网络安全和云计算解决方案提供商&#xff0c;致力于为全球客户提供高效、智能、安全的网络和云服务。随着公司业务的不断扩展&#xff0c;也面临着监…

OpenHarmony实战:轻量系统芯片移植准备

由于OpenHarmony工程需要在Linux环境下进行编译&#xff0c;此章节将指导厂商搭建OpenHarmony的编译环境、获取OpenHarmony源码&#xff0c;并且创建厂商工作目录完成厂商芯片的编译框架适配。 搭建编译环境 开展移植前请参考开发环境准备完成环境搭建工作。 获取源码 获取…

【Redis】Redis的类型及相关操作

一、常用的key操作命令 keys * 查看当前数据库的键值 ttl key 查看还有多少秒过期&#xff0c;-1表示永不过期&#xff0c;-2表示过期 del / unlink key 同样是删除&#xff0c;unlink是非阻塞删除&#xff0c;del则有可能导致阻塞 select dbindex 切换数据库 flushdb 清空…

群晖配置FTP服务结合内网穿透实现公网访问本地NAS中储存文件

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具&#xff0c;实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

文章分享:《呼吸道传染病标本采集及检测专家共识》

【摘要】呼吸道传染病临床特点多表现为发热和&#xff08;或&#xff09;呼吸道症状&#xff0c;病原学组成复杂&#xff0c;标本类型选择多样&#xff0c;如何从发热伴呼吸道症候群患者中早期正确识别出潜在呼吸道传染病患者是防控的关键环节。增强医务人员对呼吸道传染病临床…