C++——多态经典案例(二)制作饮品

news2024/11/24 20:56:55

案例:制作饮品的步骤是差不多一样的,假设都有四步,打开包装Open、煮水Boil、放杯子里面PutInCup、放佐料PutSomething、喝Drink
利用多态,制作茶和咖啡等饮品

分析:定义一个抽象类,纯虚函数包括Open、Boil、PutInCup、PutSomething和Drink
茶和咖啡等饮品类去继承这个抽象类,并实现上述的纯虚函数
通过父类指针指向子类对象进行调用即可

#include<iostream>
class AbstractMakeDrinking 
{
public:
	virtual void Open() = 0;//打开包装
	virtual void Boil() = 0;//煮开水
	virtual void PutInCup() = 0;//放到杯子里面
	virtual void PutSomething() = 0;//放调料
	virtual void Drink() = 0;//喝饮料

	void makeDrink() 
	{
		Open();
		Boil();
		PutInCup();
		PutSomething();
		Drink();
	}
};


class Tea :public AbstractMakeDrinking 
{
	void Open() 
	{
		std::cout << "Open tea..." << std::endl;
	}
	void Boil() 
	{
		std::cout << "Boil water..." << std::endl;
	}
	void PutInCup() 
	{
		std::cout << "Put tea in cup..." << std::endl;
	}
	void PutSomething() 
	{
		std::cout << "Put milk in cup..." << std::endl;
	}
	void Drink() 
	{
		std::cout << "Drink tea..." << std::endl;
	}
};


class Coffea :public AbstractMakeDrinking
{
	void Open()
	{
		std::cout << "Open Coffea..." << std::endl;
	}
	void Boil()
	{
		std::cout << "Boil milk..." << std::endl;
	}
	void PutInCup()
	{
		std::cout << "Put Coffea in cup..." << std::endl;
	}
	void PutSomething()
	{
		std::cout << "Put sugar in cup..." << std::endl;
	}
	void Drink()
	{
		std::cout << "Drink Coffea..." << std::endl;
	}
};


void doWork(AbstractMakeDrinking *makedrink) //AbstractMakeDrinking *makedrink = new xxx  父类指针makedrink指向子类对象xxx
{
	makedrink->makeDrink();
	delete makedrink;

}

int main(int argc,char ** agrv) 
{
	Tea *tea = new Tea;
	doWork(tea);
	std::cout << "-------------------" << std::endl;
	doWork(new Coffea);

	return 0;
}

运行效果:
在这里插入图片描述

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

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

相关文章

C++(1):构造函数,复制函数和析构函数

引用 ref这里是对i起了一个别名 引用和指针区别区别1.引用直接绑定2.引用必须初始化 auyo a 10;自动匹配a的类型&#xff0c;但是初始化必须给值 内联函数放头文件 不传参形参有默认值 默认形参b有b后面的都必须有默认 函数重载&#xff1a;同名不同参&#xff08;返回值不能作…

浅学 Pytorch

&#xff08;一&#xff09;Dataset Dataset 是一个抽象类&#xff0c;用于表示数据集。它封装了数据的加载和预处理逻辑&#xff0c;使得数据的读取和处理更加灵活和易于管理。在PyTorch中&#xff0c;torch.utils.data.Dataset 是一个基类&#xff0c;用户可以继承并实现自己…

软件渗透测试详细介绍,专业软件测评机构分享

随着信息技术的飞速发展&#xff0c;软件应用已成为我们生活和工作中不可或缺的一部分。然而&#xff0c;与此&#xff0c;信息安全问题也日益凸显&#xff0c;网络攻击的频繁发生让企业和用户面临前所未有的风险。为了更好地保护软件产品的安全性&#xff0c;渗透测试应运而生…

Mysql执行计划(上)

1、执行计划的概念 执行计划是什么&#xff1a;使用EXPLAIN关键字可以模拟优化器执行SQL查询语句&#xff0c;从而知道MySQL是如何处理你的SQL语句的。 作用&#xff1a;分析你的查询语句或是表结构的性能瓶颈 语法&#xff1a;Explain SQL语句 执行计划输出内容介绍&#…

记录一次网关无响应的排查

1. 使用jstack pid > thread.txt 打印进 thread.txt 文件里 去观察线程的状态。 我发现&#xff0c;一个线程在经过 rateliter的prefilter后, 先是调用 consume方法&#xff0c;获取到锁。 接着在执行 jedis的 evalsha命令时 一直卡在socket.read()的状态。 发现jedis官…

【iOS】OC关键字总结及底层原理(上)

目录 线程安全相关的关键字atomic&nonatomic 作用域相关的关键字static、extern、const&auto 读写权限相关和指定方法名的关键字内存管理相关的关键字&#xff08;或方法&#xff09;1. 引用计数的存储SideTableretain方法源码分析release方法源码分析dealloc方法源码分…

无缝融入,即刻智能[4]:MaxKB知识库问答系统[进一步深度开发调试,完成基于API对话,基于ollama大模型本地部署等]

无缝融入,即刻智能[4]:MaxKB知识库问答系统[进一步深度开发调试,完成基于API对话,基于ollama大模型本地部署等] 1.简介 MaxKB(Max Knowledge Base)是一款基于 LLM 大语言模型的开源知识库问答系统, 1.1 产品优势 开箱即用:支持直接上传文档、自动爬取在线文档,支持文本…

计算机网络 6.3Internet组成6.4Internet地址

第三节 Internet组成 一、基本结构及特点 1.Internet结构类型&#xff1a;分层网络互联群体。 2.主要构成&#xff1a;①主干网&#xff1b;②中间层网&#xff1b;③底层网。 3.结构特点&#xff1a; ①对用户隐藏网间连接的底层节点。 ②不指定网络互联的拓扑结构。 ③…

【时时三省】(C语言基础)数组作为函数参数

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ——csdn时时三省 排序为升序-冒泡排序 冒泡排序的思想: 两两相邻的元素进行比较。并且可能得话需要交换 示例: 数组名 数组名是数组首元素的地址 但是有两个例外 1.sizeof(数组名)-数组名表示整个数组-计…

VMware虚拟机上网

一、VMware Network Adapter VMnet8配置 ①打开VMware软件&#xff1a;点击菜单栏→编辑→虚拟网络编辑器 ②点击NAT模式&#xff0c;使用管理员权限对子网IP和网关进行配置 ③子网IP和掩码就是这样&#xff0c;这里可以自行配置 ④点击上图中的NAT设置&#xff0c;配置网关 …

Rider中修改默认文件关联,自定义打开方式

问题描述 想用Qt designer打开.ui文件&#xff0c;但是在Rider中&#xff0c;IDE会默认通过text进行打开 解决方法 1&#xff0c;允许用户将特定的文件类型与一个应用程序关联起来 File -> Settings -> Editor -> File Types -> Recognized File Types下&…

uniapp微信小程序 canvas绘制圆形半透明阴影 createCircularGradient函数不支持透明度部分解决方案

背景 我需要在微信小程序中&#xff0c;用canvas绘制一个圆形钟表&#xff0c;在ui设计图中&#xff0c;有一部分阴影&#xff0c;这里我节选一下&#xff1a; 即深色发黑的部分 canvas通用阴影绘制 由于canvas中并不支持css那样简单的方式为圆形添加阴影或高光&#xff0c…

Spring Boot 默认可以同时处理多少个请求?

微信中阅读&#xff0c;欢迎关注 CodeFit。 创作不易&#xff0c;如果你觉得这篇文章对您有帮助&#xff0c;请不要忘了 点赞、分享 和 关注&#xff0c;为我的 持续创作 提供 动力! 解析 Spring Boot 的请求处理能力 目前&#xff0c;Spring Boot 是 Java 开发中不可或缺的框…

【大模型从入门到精通9】openAI API 提升机器推理:高级策略3

这里写目录标题 理论问题实践问题理论实践实践 理论问题 什么是链式思考推理&#xff08;Chain of Thought Reasoning&#xff09;&#xff0c;它是如何增强人工智能模型在解决问题任务中的表现的&#xff1f; 链式思考推理提供的透明度如何使用户受益并建立对AI模型的信任&am…

基于python和aiohttp实现的web请求管理分发服务

想实现一个web请求管理分发服务&#xff0c;需要有如下功能&#xff1a; 1、第三方服务上报心跳&#xff0c;管理服务能监控第三方服务是否存活 2、管理服务支持http和ws服务的转发 3、管理服务支持最基础的转发策略&#xff0c;比方说轮询 直接上代码 一、网络和路由接口…

用AI助手写程序

用AI帮助写程序究竟靠不靠谱&#xff0c;下面来测试一下&#xff1a; 在文心一言中输入&#xff1a;写一个C Windows API串口通信程序。结果如下&#xff1a; #include <windows.h> #include <iostream> // 串口配置 void ConfigureCommPort(HANDLE hComm) {…

Linux系统的ARM边缘计算网关在纸张处理机械中的应用

数字化时代纸张处理机械行业也在不断追求智能化和高效化。ARM 边缘计算网关作为一种关键技术&#xff0c;为纸张处理机械的智能化提供了强大的支持。结合 Linux 系统的二次开发&#xff0c;它能够加速生产流程&#xff0c;提高生产效率和质量。 ARM 边缘计算网关具有强大的计算…

Python学习笔记50:游戏篇之外星人入侵(十一)

前言 本篇文章接着之前的内容&#xff0c;继续对游戏功能进行优化&#xff0c;主要是优化游戏状态以及对应的处理。 状态 一个游戏包含多种状态&#xff0c;这个状态是一个可以很复杂也可以很简单的内容。条件所限&#xff0c;我们这个游戏的状态就比较简单&#xff1a; 未…

log4j反序列化-流程分析

分析版本 JDK8u141 依赖 <dependencies><!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><ve…

三、1 一维数组的创建和初始化

数组是一组相同类型元素的集合 1、数组的创建 2、数组的初始化 在创建数组的同时&#xff0c;给数组内容一些合理的值 3、一维数组的使用 4、一维数组在内存中的存储 数组的内容在内存中连续存放