c++学习之多态

2023-11-07

多态分为两类
(1)静态多态:函数重载和运算符重载属于静态多态,复用函数名
(2)动态多态:派生类和虚函数实现运行时多态
静态多态和动态多态的区别
(1)静态多态的函数地址早绑定—编译阶段确定函数地址
(2)动态多态的函数地址晚绑定—运行阶段确定函数地址
动态多态满足条件
(1)有继承关系
(2)子类重写父类的虚函数
动态多态使用
父类的指针或者引用指向子类对象
多态
在代码运行时,根据传入的类型,决定使用哪种类称为多态

代码示例(不使用虚函数)

#include <iostream>
using namespace std;

class Animal
{
	public:
		void speak()
		{
			cout <<"动物在说话" <<endl;
		}
};
class Cat:public Animal
{
	public:
		void speak()
		{
			cout << "小猫在说话" << endl;	
		}
};
void test_doSpeak(Animal &A)
{
	A.speak(); 
}

int main()
{
	Cat c;
    test_doSpeak(c);
    return 0; 
}

输出结果
在这里插入图片描述
上面用基类的引用去引用派生类是被允许的,称为向上强制转换,这使得公有继承不需要进行显示类型转换,该规则是is-a的一部分。

代码示例(虚函数)

#include <iostream>
using namespace std;

class Animal
{
	public:
		virtual void speak()  //虚函数,地址晚绑定
		{
			cout <<"动物在说话" <<endl;
		}
};
class Cat:public Animal
{
	public:
		void speak()
		{
			cout << "小猫在说话" << endl;	
		}
};
void test_doSpeak(Animal &A)
{
	A.speak(); 
}

int main()
{
	Cat c;
    test_doSpeak(c);
    return 0; 
}

输出结果
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c++学习之多态 的相关文章

随机推荐

  • PostgreSQL使用pg_dump导出单个数据表的insert语句

    PostgreSQL自带的pgadmin4工具没有办法生成数据表的insert语句 这使得想要提取单个表的数据 插入到不同环境的相同表中变成很麻烦的一件事 使用PostgreSQL的pg dump工具可以实现该功能 目录 使用效果 操作过程
  • table 嵌套table 让内部table高度填满外部的td

    需要在外层的父table增加属性style height 100 然后内部table增加style height 100 才会生效 这样的效果是内层的table会跟着外层的高度变化而变化 不是那种设置固定高度无法动态变化的写法
  • java Desktop 使用样例

    package test import java awt Desktop import java io File import java net URI public class DeskTopTest private static Des
  • springboot+微信公众号 实现给女盆友定时发送消息

    springboot 微信公众号 实现给女盆友定时发送消息 1 准备工作 申请微信公众号的测试平台 地址 https mp weixin qq com 注意保存以上三个部分 第一个是公众号的ID和秘钥 第二个是扫码关注你的公众号 也就是消息
  • -day28索引和函数及存储过程

    day28 索引和函数及存储过程 课程目标 了解MySQL中索引 函数 存储过程 函数 触发器 视图等知识点 课程概要 索引 函数 存储过程 视图 触发器 1 索引 在数据库中索引最核心的作用是 加速查找 例如 在含有300w条数据的表中查
  • 深度探索C++对象模型 学习笔记 第一章 关于对象

    宏定义 define Point3d print pd printf g g g pd gt x pd gt y pd gt z g表示自动选择合适的表示法输出 在C 中 可以通过抽象数据类型ADT 一个class中的成员函数 实现 纯C的
  • react学习小记

    React react和vue的不同 vue 双向数据流 他的数据绑定依赖数据劫持 object defineProperty 中的getter 和 setter 更形视图是采用 MVVM React 单向数据流 依赖 onChange s
  • SpringBoot集成webservice

    前言 之前在工作中 有时候需要去对接第三方的医院 而很多医院的his系统用的都是老技术 WebService 一直在对接webservice接口 却不知道webservice接口是怎么实现的 这一次 我们来一探究竟 这里吐槽一句 都什么年代
  • 6.Android学习之Android事件处理和手势(一)

    目录 6 Android事件处理和手势 一 1 事件处理概述 1 1 基于监听的事件处理 1 2 基于回调的事件处理 2 物理按键事件处理 3 触摸屏事件处理 3 1 单击事件 3 2 长按事件 3 3 触摸事件 6 Android事件处理
  • 蓝桥杯真题:质数拆分

    这里 若干两两不同的质数之和 这里其实很容易想到首先我们要求出2019内的所有质数 这个打个表就好了 其次两两不同 我们应该要想到动态规划 这里设dp i j 表示前i个质数 可以两两不同加起来等于j的方案数 如果当前j gt prime
  • FinalShell连接不上ubuntu解决办法

    刚开始一直提示connection refused ubuntu没有自带SSH 安装即可 命令如下 sudo apt update 更新数据 sudo apt upgrade 更新软件 sudo apt install openssh se
  • 深度学习(1)-深度学习中的核函数(激活函数)

    1 核函数的作用 激活函数 核函数 kernel method kernel trick 是机器学习中一种重要的方法 一般定义是将原始表达转换到一个隐式特征空间去 该空间具有更好的特征可分性质 在机器学习中 一层线性卷积结构 一层核函数 N
  • 怎么把ipad中超大文件传输到电脑

    遇到了一个问题就是ipad文件中有几个超大压缩包需要传到电脑 想着上传到网盘在下载不是美滋滋 还特地借到了会员 为了上传大文件 但是网盘就很过分 会员在ipad端上传超过4g的文件也不允许 电脑端就没得问题 很无奈 然后问了度娘 给的各种解
  • LABVIEW2020 字符串连接的图标在哪里

    我是LABVIEW菜鸟 学习LABVIEW 2020已经3天了 找了几天都没有找到字符串连接的图标 今天终于找到了 标记一下
  • python smtplib.SMTP_SS发邮件提示550, b‘The “From“ header is missing or invalid

    发现网站不能注册新用户 报错提示 550 b The From header is missing or invalid Please follow RFC5322 RFC2047 RFC822 standard protocol http
  • React Native - Image组件的使用详解(加载资源、网络、本地图片)

    原文地址 http www hangge com blog cache detail 1542 html 一 Image组件介绍 同 HTML 的 img 元素一样 React Native 提供的 Image 组件可以用来显示各种途径的图
  • C. Bricks and Bags Codeforces Round #831 (Div. 1 + Div. 2)

    在经历了几天的卡题和没思路 看题解没看懂中终于把这一道题给磕了出来 感觉这题做不出的原因的没有想好极值的处理关系和太看重特殊情况而忽略了一般情况 传送门 题目 有A和B两个人 给你n个石头和3个袋子w1 w2 w3 每个石头都有自己的值 现
  • win10下安装Pytorch (CUDA9.1+CUDNN7.0)

    一 CUDA 下载地址 直接搜索便可找到 我下载的是9 1版本的 安装步骤 1 点击cuda 9 1 85 win10 exe安装 2 按顺序同意就好 3 完成 得到如下两个图标 4 官网下载时还有以下三个patch 反正我又顺次点开安装了
  • Mac 安装/更换node版本命令(值得收藏)

    Mac 安装 更换node版本命令 收集node指令 方便查找 在mac终端里面输入如下指令 全局安装n模块 sudo npm install n g 更新npm到最新版本 sudo npm install npm latest g 安装当
  • c++学习之多态

    多态分为两类 1 静态多态 函数重载和运算符重载属于静态多态 复用函数名 2 动态多态 派生类和虚函数实现运行时多态 静态多态和动态多态的区别 1 静态多态的函数地址早绑定 编译阶段确定函数地址 2 动态多态的函数地址晚绑定 运行阶段确定函