第十八章 类和对象——多态

一、多态的基本概念

多态是C++面向对象三大特性之一

多态分为两类

  • 静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名

  • 动态多态: 派生类和虚函数实现运行时多态

静态多态和动态多态区别:

  • 静态多态的函数地址早绑定 - 编译阶段确定函数地址

  • 动态多态的函数地址晚绑定 - 运行阶段确定函数地址

下面通过案例进行讲解多态

class Animal
{
public://Speak函数就是虚函数//函数前面加上virtual关键字,变成虚函数,那么编译器在编译的时候就不能确定函数调用了。virtual void speak(){cout << "动物在说话" << endl;}
};
​
class Cat :public Animal
{
public:void speak(){cout << "小猫在说话" << endl;}
};
​
class Dog :public Animal
{
public:
​void speak(){cout << "小狗在说话" << endl;}
​
};
//我们希望传入什么对象,那么就调用什么对象的函数
//如果函数地址在编译阶段就能确定,那么静态联编
//如果函数地址在运行阶段才能确定,就是动态联编
​
void DoSpeak(Animal & animal)
{animal.speak();
}
//
//多态满足条件: 
//1、有继承关系
//2、子类重写父类中的虚函数
//多态使用:
//父类指针或引用指向子类对象
​
void test01()
{Cat cat;DoSpeak(cat);
​
​Dog dog;DoSpeak(dog);
}
​
​
int main() {
​test01();
​system("pause");
​return 0;
}
 

总结:

多态满足条件

  • 有继承关系

  • 子类重写父类中的虚函数

多态使用条件

  • 父类指针或引用指向子类对象

重写:函数返回值类型 函数名 参数列表 完全一致称为重写

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

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

相关文章

git异常:error: failed to push some refs to

场景 git上创建项目后&#xff0c;点击了add readme.md按钮&#xff0c;生成readme文件&#xff0c;导致clone代码后&#xff0c;无法pull&#xff0c;提示异常如下&#xff1a; error: failed to push some refs to http:192.168.xxx.xxx解决方法 执行命令 git pull --reb…

Anaconda prompt中使用conda下载pytorch,一直卡在solving environment解决方案

关闭梯子 清空镜像源&#xff1a; conda config --remove-key channels 在pytorch官网找到对应的版本与命令&#xff1a;PyTorch conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia&#xff08;我的电脑CUDA版本为12.1.103&#xff0c;…

204、RabbitMQ 之 使用 topic 类型的 Exchange 实现通配符路由

目录 ★ 使用topic实现通配符路由代码演示topic通配符类型的Exchange代码演示:ConstantUtilConnectionUtilProducerConsumer01执行结果生产者消费者01消费者02 完整代码&#xff1a;ConstantUtilConnectionUtilProducerConsumer01Consumer02pom.xml ★ 使用topic实现通配符路由…

用servlet实现一个简单的猜数字游戏。

需要两个页面&#xff0c;一个jsp页面&#xff08;guess.jsp&#xff09;和servlet页面&#xff08;servlet&#xff09;。 一.jsp页面 在jsp页面中需要实现&#xff1a; 1.创建随机数并且保存在session中。 2.做个form表单提交猜的数字给servlet页面。 <%page import&…

MySQL数据库的基本操作一

目录 什么是MySQL数据库? 数据库的基本操作 数据库操作 表操作 MySQL的增删改查 插入操作 查找操作 修改操作 删除操作 什么是MySQL数据库? MySQL 是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;目前属于 Oracle 公司。MySQL 是一种关…

Ceph 中的写入放大

新钛云服已累计为您分享769篇技术干货 介绍 Ceph 是一个开源的分布式存储系统&#xff0c;设计初衷是提供较好的性能、可靠性和可扩展性。 Ceph 独一无二地在一个统一的系统中同时提供了对象、块、和文件存储功能。 Ceph 消除了对系统单一中心节点的依赖&#xff0c;实现了无中…

Linux运行环境搭建系列-Flink安装

Flink安装 ## 下载 https://archive.apache.org/dist/flink/flink-1.16.2 ## 解压 tar -zxvf flink-1.16.2-bin-scala_2.12.tgz && rm -rf flink-1.16.2-bin-scala_2.12.tgz ## 启动 cd flink-1.16.2/bin ## 修改/etc/hosts文件&#xff0c;把第一行的127.0.0.1改成自…

【SQL】新建库表时,报错attempt to write a readonly database

目录 1.问题背景 2.问题原因 3.解决方式 4.结果 windows64位 Navicat sql vscode c 1.问题背景 需求是这样&#xff1a; 希望在调用初始化数据库方法时&#xff0c;查看是否有名为【POCT_PROCESS_CONFIG】的数据库表&#xff0c;如果没有就新建 我的数据库格式是这样 …

小谈设计模式(26)—中介者模式

小谈设计模式&#xff08;26&#xff09;—中介者模式 专栏介绍专栏地址专栏介绍 中介者模式分析角色分析抽象中介者&#xff08;Mediator&#xff09;具体中介者&#xff08;ConcreteMediator&#xff09;抽象同事类&#xff08;Colleague&#xff09;具体同事类&#xff08;C…

print() 函数

二、print() 函数 这里先说一下 print() 函数&#xff0c;如果你是新手&#xff0c;可能对函数不太了解&#xff0c;没关系&#xff0c;在这里你只要了解它的组成部分和作用就可以了&#xff0c;后面函数这一块会详细说明的。 print() 函数由两部分构成 &#xff1a; 指令&a…

5、docker mysql安装

1、查看版本 docker search mysql 2、下载镜像到本地 下载镜像&#xff0c;本文以5.7为例 docker pull mysql:5.7 3、创建挂载目录 mkdir /usr/local/mysql 4、创建mysql容器 docker run --name mysql-test -e MYSQL_ROOT_PASSWORDroot -p 3306:3306 -d mysql –name&am…

由论文写作到知识教育传承,智者善用,扶AIGC踏新程!

在学术领域中&#xff0c;诚信是不可动摇的基石。但是&#xff0c;令人震惊的事件发生了&#xff0c;竟有学术论文作者将ChatGPT上操作按钮的短语「Regenerate Response」毫无保留地援引到自己的论文中&#xff0c;更令人惊讶的是&#xff0c;审稿编辑竟然未能察觉这一事实&…

spark中的shuffle简述 那些会导致shuffle的算子

shuffle操作说白了就是重分区操作 在Apache Spark中&#xff0c;任务之间的依赖关系主要分为两类&#xff1a;宽依赖&#xff08;Wide Dependency&#xff09;和窄依赖&#xff08;Narrow Dependency&#xff09;。这两者之间的主要区别在于它们对任务之间数据的依赖性以及执行…

品牌投放小红书种草笔记没有流量怎么办?

品牌做小红书种草投放&#xff0c;流量越大&#xff0c;种草笔记的转化就会越高&#xff0c;所以当你的小红书种草笔记没有流量的时候就要好好思索下是怎么回事&#xff0c;接下来伯乐网络传媒就来给大家分析问题&#xff0c;并提出针对性的解决方案。纯干货&#xff0c;建议收…

【网络编程】Linux网络编程基础与实战第二弹——Socket编程

Socket编程套接字概念套接字通讯原理 网络编程接口网络字节序sockaddr数据结构socket函数bind函数listen函数accept函数connect函数 ) Socket编程 套接字概念 Socket本身有“插座”的意思&#xff0c;在Linux环境下&#xff0c;用于表示进程间网络通信的特殊文件类型。本质为…

【TensorFlow2 之011】TF 如何使用数据增强提高模型性能?

一、说明 亮点&#xff1a;在这篇文章中&#xff0c;我们将展示数据增强技术作为提高模型性能的一种方式的好处。当我们没有足够的数据可供使用时&#xff0c;这种方法将非常有益。 教程概述&#xff1a; 无需数据增强的训练什么是数据增强&#xff1f;使用数据增强进行训练可视…

sts搭建springboot

sts搭建springboot 需要的软件 Apache-maven-3.3.9.rar 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1xgj Spring-tool-suite-4-4.20.0.RELEASE-e4.29.0-win32.win32.x86_64.self-extracting.jar 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;p…

初级问题 程序中的变量是指什么?中级问题 把若干个数据沿直线排列起来的数据结构叫作什么?高级问题 栈和队列的区别是什么?

目录 1.深刻主题 2.描写复杂人物 初级问题 程序中的变量是指什么&#xff1f; 中级问题 把若干个数据沿直线排列起来的数据结构叫作什么&#xff1f; 高级问题 栈和队列的区别是什么&#xff1f; 计算机图形学&#xff08;有效边表算法&#xff09; 介绍一下计算机图形学…

焦炭反应性及反应后强度试验方法

声明 本文是学习GB-T 4000-2017 焦炭反应性及反应后强度试验方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 7— 进气口&#xff1b; 8— 测温热电偶。 图 A.1 单点测温加热炉体结构示意图 A.3 温度控制装置 控制精度&#xff1a;(11003)℃。…

oracle数据库的缓存设置

Oracle缓存由两个参数控制SGA_TARGET和PGA_AGGREGATE_TARGET&#xff0c;设置了这两个参数&#xff0c;其他的基本内存部分都由Oracle自动配置为最优值&#xff0c;这也是Oracle推荐的方式。 SGA_TARGET 和PGA_AGGREGATE_TARGET是动态参数&#xff0c;可以在不重启数据库的情况…