C++——多态

多态是有继承关系的类对象调用相同的函数,会有不同的结果。例如,普通人买高铁票不打折,学生打75折,儿童免费,这种情况就适合使用多态

虚函数

被virtual修饰的类成员函数

class A{
public:virtual void fun() {}
};

这里的virtual和类的虚继承没有任何关系,只是使用了相同的关键词

多态的条件

1.必须使用基类的指针或引用调用基类的虚函数

2.派生类中必须对被调用的基类中的虚函数进行重写

3.重写的条件:派生类中函数的返回值,函数名和参数列表与基类中的虚函数相同(三同)

(派生类中重写的函数可以不加virtual,因为该成员函数从父类中继承了virtual属性,但是建议加上更规范)

class Person {
public:virtual void buy_ticket(){cout << "full price ticket" << endl;}
};class Student :public Person {
public:virtual void buy_ticket(){cout << "half price ticket" << endl;}
};void test1()
{Person Tom;Student Mike;Person p1 = Mike;p1.buy_ticket();Person* pp = &Mike;pp->buy_ticket();Person& p = Mike;p.buy_ticket();//full price ticket//half price ticket//half price ticket
}

final

final修饰虚函数表示这个虚函数不能再被重写

class Person {
public:virtual void buy_ticket(){cout << "full price ticket" << endl;}
};class Student :public Person {
public:void buy_ticket() final{cout << "half price ticket" << endl;}
};

override

override修饰派生类虚函数,可以检查派生类虚函数是否重写了积累的虚函数,如果没有就会报错

class Person {
public:virtual void buy_ticket(){cout << "full price ticket" << endl;}
};class Student :public Person {
public:virtual void buy_ticket()override{cout << "half price ticket" << endl;}
};

重写的特例

协变(了解)

重写的的函数返回值不同,且基类的函数返回值是基类对象的指针或引用,派生类的函数返回值是派生类对象的指针或引用。

注意:只要基类和派生类的返回值是继承关系即可,所以函数返回值不一定只是函数所在类的对象的指针或引用

class A {};class B :public A {};class Person {
public:virtual const A& fun(){return A();}
};class Student :public Person {
public:virtual const B& fun(){return B();}
};

析构函数

析构函数需要重写吗?看下面这个例子

class Person {
public:~Person() { cout << "~Person()" << endl; }
};
class Student : public Person {
public:~Student() { cout << "~Student()" << endl; }
};void test2()
{Person* p = new Student;delete p;//~Person()
}

由于没有重写,释放空间p的时候,只调用了Person的析构函数。造成内存泄漏

那么析构函数怎么重写?函数名不一样这怎么办?

编译器对析构函数进行处理,析构函数名都是destructor,我们只要在析构函数前加virtual就可以

class Person {
public:virtual ~Person() { cout << "~Person()" << endl; }
};
class Student : public Person {
public:virtual ~Student() { cout << "~Student()" << endl; }
};void test3()
{Person* p = new Student;delete p;//~Student()//~Person()
}

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

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

相关文章

【深度学习】深度学习实验四——循环神经网络(RNN)、dataloader、长短期记忆网络(LSTM)、门控循环单元(GRU)、超参数对比

一、实验内容 实验内容包含要进行什么实验,实验的目的是什么,实验用到的算法及其原理的简单介绍。 1.1 循环神经网络 (1)理解序列数据处理方法,补全面向对象编程中的缺失代码,并使用torch自带数据工具将数据封装为dataloader。 (2)分别采用手动方式以及调用接口方式…

Redis--List、Set、Zset、Hash、Bitmaps、HyperLogLog、Geospatial

List LPUSH key value1 [value2] 将一个或多个值插入到列表头部 127.0.0.1:6379> LPUSH myls1 1 (integer) 1 127.0.0.1:6379> LPUSH myls1 2 (integer) 2 127.0.0.1:6379> LRANGE myls1 0 -1 1) "2" 2) "1" LPOP key 移出并获取列表的第一个元素…

【排序算法】详解直接插入排序和希尔排序原理及其性能分析

文章目录 插入排序算法原理细节分析代码实现复杂度分析:稳定性分析:与冒泡排序的对比 希尔排序算法原理细节分析代码实现复杂度分析稳定性分析 总结对比 插入排序 算法原理 插入排序又或者说直接插入排序,是一种和冒泡排序类似的并且比较简单的排序方法&#xff0c; 基本思想…

3、Linux下安装

以下操作仅限于rh系列:支持rpm/yum安装方式&#xff0c;不支持deb/apt安装方式。 以下操作仅限于rh系列&#xff1a;支持rpm/yum安装方式&#xff0c;不支持 deb/apt安装方式。 1、在线下载安装包&#xff1a; wget https://downloads.mysql.com/archives/get/p/23/file/ m…

打造个人专属形象!工业级人物写真生成工具FaceChain开源

简介 FaceChain 是一个可以用来打造个人数字形象的深度学习模型工具。用户仅需要提供最低一张照片即可获得独属于自己的个人形象数字替身。FaceChain 支持在 gradio 的界面中使用模型训练和推理能力&#xff0c;也支持资深开发者使用 python 脚本进行训练推理。 Github链接&…

长短期记忆网络(LSTM)

一. 什么是LSTM Long Short Term Memory&#xff08;LSTM&#xff0c;长短期记忆&#xff09;是一种特殊的递归神经网络。这种网络与一般的前馈神经网络不同&#xff0c;LSTM可以利用时间序列对输入进行分析。 简而言之&#xff0c;当使用前馈神经网络时&#xff0c;神经网络会…

Linux 中如何安全地抹去磁盘数据?

哈喽大家好&#xff0c;我是咸鱼 离过职的小伙伴都知道&#xff0c;离职的时候需要上交公司电脑&#xff0c;但是电脑里面有许多我们的个人信息&#xff08;聊天记录、浏览记录等等&#xff09; 所以我们就需要先把这些信息都删除&#xff0c;确保无法恢复之后才上交 即有些…

MongoDB 索引和常用命令

一、基本常用命令 1.1 案例需求 存放文章评论的数据存放到 MongoDB 中&#xff0c;数据结构参考如下&#xff0c;其中数据库为 articledb&#xff0c; 专栏文章评论 comment 字段名称 字段含义 字段类型 备注 _id ID ObjectId或String Mongo的主键的字段 articlei…

海量数据插入的各种方案试验

海量数据插入的各种方案试验&#xff0c;大家来分析下 前提 源表&#xff1a;一千万条以上记录&#xff0c;54个字段.exp导出文件2.8G以上。 目的表&#xff1a;无索引&#xff0c;空表 试验&#xff1a;A.本地插入。B.跨库插入 初始化 SQL> select count…

怎么团队合作,协作开发

一、代码托管平台 我是在大一下的一个竞赛中接触到的代码托管平台 那个时候我也算是什么都不会的&#xff0c;不过不得不说这个确实比较重要&#xff0c;对我造成了一些冲击 在我看来&#xff0c;代码托管平台的作用就是在一个中转站&#xff08;仓库&#xff09;上存储我们写…

自己在家给电脑重装系统Win10教程

自己在家怎么给电脑重装系统Win10&#xff1f;Win10电脑系统如果操作时间特别长了&#xff0c;就可能出现卡顿、蓝屏等系统问题&#xff0c;这时候用户就想给电脑重装系统&#xff0c;却不知道重装具体的操作步骤&#xff0c;下面小编给大家详细介绍自己在家给电脑重装Win10系统…

IRC/ML:金融智能风控—信贷风控场景简介、两大场景(贷款场景+信用卡场景)、信用卡评分模型设计、反欺诈检测技术的简介、案例应用之详细攻略

IRC/ML:金融智能风控—信贷风控场景简介、两大场景(贷款场景+信用卡场景)、信用卡评分模型设计、反欺诈检测技术的简介、案例应用之详细攻略 目录 信贷风控简介 信贷风控两大场景

Java程序中调用Python脚本(兼容Windows与Linux)

一&#xff0c;说明 想实现如下功能&#xff0c;项目后端架构是Spring Boot&#xff0c;某个功能需要调用Python脚本来实现&#xff0c;调用Python脚本的功能要兼容Windows和Linux&#xff0c;即可以运行在Windows和Linux两种平台上。 二&#xff0c;Java代码 // 定义一个线…

k8s-13 存储之secret

Secret 对象类型用来保存敏感信息&#xff0c;例如密码、OAuth 令牌和 ssh key。 敏感信息放在 secret 中比放在 Pod 的定义或者容器镜像中来说更加安全和灵活 。 Pod 可以用两种方式使用 secret:作为 volume 中的文件被挂载到 pod 中的一个或者多个容器里 当 kubelet 为 pod 拉…

奖学金答辩注意事项

奖学金答辩注意事项 1.PPT制作 注意字数不要太多&#xff0c;一页PPT里面不要堆满了文字。 评审老师主要是来听你演讲和答辩的&#xff0c;而不是来看你的文字叙述的。就算文字有些多&#xff0c;也要尽量以表格的形式呈现&#xff0c;不然看上去就会非常乱。多用图和表&…

github 中关于Pyqt 的module view 操作练习

代码摘自&#xff0c;Pyside6 中的示例代码部分 # -*- coding: utf-8 -*- import sys from PySide6.QtWidgets import * from PySide6.QtGui import * from PySide6.QtCore import * from PySide6.QtSql import QSqlDatabase, QSqlQueryModel, QSqlQuery import os os.chdir(os…

专业144,总分440+,上岸西北工业大学827西工大信号与系统考研经验分享

我的初试备考从4月末&#xff0c;持续到初试前&#xff0c;这中间没有中断。 总的时间分配上&#xff0c;是数学>专业课>英语>政治&#xff0c;虽然大家可支配时间和基础千差万别&#xff0c;但是这么分配是没错的。 数学 时间安排&#xff1a;3月-7月&#xff1a;…

人声分离软件:iZotope RX 10 (WinMac) 中文汉化版

iZotope RX 10是一款在音频修复和增强领域中非常出色的软件。它提供了一套全面的音频问题解决方案&#xff0c;为后期制作专业人员、音频工程师和视频编辑者解决各种棘手问题。 iZotope RX 10的主要特点包括&#xff1a; 声音修复功能&#xff1a;可以去除不良噪音、杂音、吱吱…

使用Python,Xpath获取所有的漫画章节路径,并下载漫画图片生成单个/多个pdf,并进行pdf合并

使用Python&#xff0c;Xpath获取所有的漫画章节路径&#xff0c;并下载漫画图片生成单个/多个pdf&#xff0c;并进行pdf合并 1 效果图2 原理2.1 pa_mh.py获取喜欢的漫画及所有章节2.2 pyImg2pdf.py根据图片生成单个/多个pdf并增加章节提示 3 源码3.1 pa_mh.py获取喜欢的漫画及…

python的pyecharts第三方模块绘制高端统计图表

pyecharts库 python的pyecharts库是一个用于生成 Echarts 图表的python第三方类库&#xff0c;可以绘制很高端的统计图表以便展示数据。 安装方法 pip安装 pip install pyecharts或者github拉取下载安装 git clone https://github.com/pyecharts/pyecharts.git cd pyechar…