首页 > 其他分享 >32多态

32多态

时间:2024-01-25 17:12:32浏览次数:508  
标签:name 32 基类 多态 Animal 派生类 bark

多态

  • 静态(编译时期)的多态:函数重载(在编译阶段就确定好调用的函数版本)、模板(函数模板和类模板)
  • 动态(运行时期)的多态:在继承结构中,基类指针(引用)指向派生类对象,通过该指针(引用)调用同名覆盖方法(虚函数),基类指针指向哪个派生类对象,就会调用哪个派生类的覆盖方法,称为多态。
pbase->show();
//多态底层是通过动态绑定来实现的
//pbase->访问谁的vfptr->访问谁的vftable->当然调用的是对应的派生类对象的方法
class Animal
{
public:
	Animal(string name) : _name(name) {}
	virtual void bark() {}
protected:
	string _name;
};

class Cat : public Animal
{
public:
	Cat(string name) : Animal(name) {}
	void bark() { cout << _name << " bark: miao miao!" << endl; }
};


class Dog : public Animal
{
public:
	Dog(string name) : Animal(name) {}
	void bark() { cout << _name << " bark: wang wang!" << endl; }
};

class Pig : public Animal
{
public:
	Pig(string name) : Animal(name) {}
	void bark() { cout << _name << " bark: heng heng!" << endl; }
};

/*
下面的API无法做到“开-闭”原则:对修改关闭,对扩展开放

void bark(Cat &cat)
{
	cat.bark();
}

void bark(Dog& dog)
{
	dog.bark();
}

void bark(Pig& pig)
{
	pig.bark();
}
*/

void bark(Animal* p) //(Animal& p){p.bark();}这样也能实现功能,但是属于静态绑定
{
	p->bark();
}

int main()
{
	Cat cat("猫咪");
	Dog dog("二哈");
	Pig pig("佩奇");

	bark(&cat); // 动态绑定
	bark(&dog);
	bark(&pig);

	return 0;
}

继承/多态的好处:

  • 代码复用效率提高
  • 基类中提供统一的虚函数接口,派生类重写。

标签:name,32,基类,多态,Animal,派生类,bark
From: https://www.cnblogs.com/sio2zyh/p/17987574

相关文章

  • ESP32-S3 通过USB Serial更新固件
    本文主要介绍ESP32-S3在ubuntu20.04下通过ESP32-S3的USBSerial更新固件的方法以及遇到的问题的解决方法。现在市面上ESP32-S3的开发板,大多都是ESP32-S3搭配一个USB-To-Serial桥芯片(CP210X、CH340等)来使用,硬件上再设计一个自动烧录电路(如下所示),以达到通过串口实现固件更新的......
  • STM32CubeMX教程24 WDG - 独立窗口看门狗
    1、准备材料开发板(正点原子stm32f407探索者开发板V2.4)STM32CubeMX软件(Version6.10.0)野火DAP仿真器keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动XCOMV2.6串口助手逻辑分析仪nanoDLA2、实验目标使用STM32CubeMX软件配置STM32F407开发板的独立看门狗(IWDG)和窗口看门狗(WWDG)并了......
  • NanoFramework操作ESP32(一)_基础元器件篇(二十二)_DHT11温湿度传感器
    一、元器件介绍1、针脚用途编号名称功能1VCC电源正2TRIG触发控制信号输入3ECHO回响信号输出4GND电源地2、电气参数 二、示例代码1、代码:元器件的针脚ESP32模块的针脚VCC;供电脚+5VTRIG;发送脚IO17ECHO;接收脚IO16GND......
  • 微雪ESP32-S3-Zreo学习笔记之USB串口
    软件下载ESP32-S3-Zero没有板载USB转串口,无法实现自动下载。下载软件时要按住Boot按键再上电,此时电脑会识别到一个USB模拟的COM口,可用于下载软件。开发环境编程环境是使用的esp-idf-4.4.2;值得注意的是在此之前安装了esp-idf-5.0.2、esp-idf-5.1.2都不能正常使用,安装好后使......
  • P1321 单词覆盖还原
    1.题目单词覆盖还原题目描述一个长度为\(l\)的字符串中被反复贴有boy和girl两单词,后贴上的可能覆盖已贴上的单词(没有被覆盖的用句点表示),最终每个单词至少有一个字符没有被覆盖。问贴有几个boy几个girl?输入格式一行被反复贴有boy和girl两单词的字符串。输出格式......
  • Redis整形溢出漏洞(CVE-2021-32761)及修复脚本
    今天的计划是修复线上的redis漏洞Redis整形溢出漏洞(CVE-2021-32761)及修复脚本目的:修复生产的redis漏洞,主要是整数溢出漏洞,但是过程中发现还有反弹shell漏洞(次要,毕竟需要密码)计划:获取生产的redis版本账号和密码在测试环境搭建反正环境漏洞的研究与证实测试环......
  • STM32CubeMX教程23 FSMC - IS62WV51216(SRAM)驱动
    1、准备材料开发板(正点原子stm32f407探索者开发板V2.4)STM32CubeMX软件(Version6.10.0)野火DAP仿真器keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动XCOMV2.6串口助手2、实验目标使用STM32CubeMX软件配置STM32F407开发板的FSMC实现以轮询或DMA的方式读写IS62WV51216(SRAM)芯片3、......
  • 【题解 P3293】 美味
    [SCOI2016]美味题目描述一家餐厅有\(n\)道菜,编号\(1,2,\ldots,n\),大家对第\(i\)道菜的评价值为\(a_i\)。有\(m\)位顾客,第\(i\)位顾客的期望值为\(b_i\),而他的偏好值为\(x_i\)。因此,第\(i\)位顾客认为第\(j\)道菜的美味度为\(b_i\oplus(a_j+x_i)\),\(\opl......
  • 32_将有序数组转换为平衡二叉搜索树
    108、将有序数组转换为二叉搜索树给你一个整数数组nums,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过1」的二叉树。示例1:输入:nums=[-10,-3,0,5,9]输出:[0,-3,9,-10,nul......
  • [转帖]ORA-01450 maximum key length (3215) exceeded
    一、问题背景给一个业务表online建索引时遇到了ORA-01450maximumkeylength(3215)exceeded报错,看字面意思是字段太长了,检查表字段类型发现基本都是nvarchar2(2000),有些字段(例如unit)明显是不需要这么长的,表的设计有问题,联系开发按实际需求改短后能正常创建。奇怪的是表的......