C++——多态经典案例(三)计算器

案例:使用多态实现一个简单的计算器,计算两个数的加减乘除结果

分析:定义一个抽象类AbstractCalc ,其内部定义一个纯虚函数getResult,用于得到计算结果
定义加减乘除四个类,分别继承这个抽象类AbstractCalc,重写内部的纯虚函数getResult,只不过根据各种需求重新内容不同而已
最后可以通过父类指针指向子类对象进行调用加减乘除各自对父类的纯虚函数重写后的getResult函数即可

#include<iostream>
class AbstractCalc 
{
public:virtual int getResult() = 0;int getNum1() {return m_num1;}int getNum2(){return m_num2;}void setNum1(int num){m_num1 = num;}void setNum2(int num){m_num2 = num;}private:int m_num1;int m_num2;
};class AddCal :public AbstractCalc
{
public:virtual int getResult(){return getNum1() + getNum2();}};
class SubCal :public AbstractCalc
{
public:virtual int getResult(){return getNum1() - getNum2();}};class MulCal :public AbstractCalc 
{
public :virtual int getResult(){return getNum1() * getNum2();}};class DivCal :public AbstractCalc
{
public:virtual int getResult(){return getNum1() / getNum2();}};int main()
{AbstractCalc *calc_add = new AddCal;calc_add->setNum1(10);calc_add->setNum2(20);std::cout << calc_add->getResult() << std::endl;//10+20=30delete calc_add;AbstractCalc* calc_sub = new SubCal;calc_sub->setNum1(20);calc_sub->setNum2(2);std::cout << calc_sub->getResult() << std::endl;//20-2=18delete calc_sub;//乘除里面有一些小细节,这里只是为了距离更好理解多态,具体小细节就不再赘述了,自己可以去完善实现,注意除法分母不为0等一些小细节AbstractCalc* calc_mul = new MulCal;calc_mul->setNum1(2);calc_mul->setNum2(2);std::cout << calc_mul->getResult() << std::endl;//2*2=4delete calc_mul;AbstractCalc* calc_div = new DivCal;calc_div->setNum1(18);calc_div->setNum2(9);std::cout << calc_div->getResult() << std::endl;//18/9=2delete calc_div;return 0;
}

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

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

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

相关文章

【面试题】【简历版】完整版

一、Java 基础 java 面向对象特性 封装&#xff08;Encapsulation&#xff09;&#xff1a; public class Student {// 将name和age封装起来private String name;private int age;// 提供方法设置和获取这些属性public void setName(String name){this.name name;}public Str…

建议收藏!免费素材管理软件,设计师必备工具

前言 在设计的世界里&#xff0c;素材管理无疑是一项既重要又繁琐的任务。设计师们常常面临着海量素材的整理、分类和检索问题&#xff0c;这不仅消耗了大量的时间和精力&#xff0c;也常常因为素材的杂乱无章而影响创作灵感的涌现。因此&#xff0c;寻找一款能够解决这些痛点…

python实现小游戏随机猜数

1、脚本练习 import random# 初始化剩余的猜测次数 counts 3 # 生成一个1到10之间的随机整数 numb random.randint(1, 10)# 循环直到猜测次数用完 while counts > 0:tmp input("请输入小鱼手里的数字 (你还剩下 {} 次机会): ".format(counts))guess int(tmp)…

SemanticKernel/C#:使用Ollama中的对话模型与嵌入模型用于本地离线场景

前言 上一篇文章介绍了使用SemanticKernel/C#的RAG简易实践&#xff0c;在上篇文章中我使用的是兼容OpenAI格式的在线API&#xff0c;但实际上会有很多本地离线的场景。今天跟大家介绍一下在SemanticKernel/C#中如何使用Ollama中的对话模型与嵌入模型用于本地离线场景。 开始…

LVS部署DR集群

介绍 DR&#xff08;Direct Routing&#xff09;&#xff1a;直接路由&#xff0c;是LVS默认的模式&#xff0c;应用最广泛. 通过为请求报文重新封装一个MAC首部进行转发&#xff0c;源MAC是DIP所在的接口的MAC&#xff0c;目标MAC是某挑选出的RS的RIP所在接口的MAC地址. 整个…

生物信息学入门:Linux学习指南

还没有使用过生信云服务器&#xff1f;快来体验一下吧 20核心256G内存最低699元半年。 更多访问 https://ad.tebteb.cc 介绍 大家好&#xff01;作为一名生物信息学的新人&#xff0c;您可能对Linux感到陌生&#xff0c;但别担心&#xff0c;本教程将用简单明了的方式&#xff…

防止老年痴呆的小学题

直角三角形的周长为16,斜边长为7,求三角形的面积(不使用勾股定理) 答案为(9*9-7*7)/4

【前端】 如何在 Vue.js 中使用 Mock 数据:教程与技巧

如何在 Vue.js 中使用 Mock 数据&#xff1a;教程与技巧 在开发过程中&#xff0c;为了测试和开发前端功能&#xff0c;你常常需要用到模拟&#xff08;mock&#xff09;数据。Vue.js 提供了灵活的方式来处理数据请求和更新&#xff0c;但在没有真实后端的情况下&#xff0c;我…

WPF学习(2)-UniformGrid控件(均分布局)+StackPanel控件(栈式布局)

UniformGrid控件&#xff08;均分布局&#xff09; UniformGrid和Grid有些相似&#xff0c;只不过UniformGrid的每个单元格面积都是相等的&#xff0c;不管是横向的单元格&#xff0c;或是纵向的单元格&#xff0c;它们会平分整个UniformGrid。 UniformGrid控件提供了3个属性…

QT使用腾讯云对象存储SDK报错:`undefined reference to qcloud_cos`

QT使用腾讯云对象存储SDK编译时报错&#xff1a;undefined reference to qcloud_cos 文章目录 QT使用腾讯云对象存储SDK编译时报错&#xff1a;undefined reference to qcloud_cos问题1&#xff1a;在VS中编译cossdk报错LNK1104 无法打开文件“PocoFoundationd.lib”问题2&…

一文读懂什么是“AI算力”(建议收藏)

在当今快速发展的科技时代&#xff0c;人工智能&#xff08;AI&#xff09;已成为推动社会进步的重要力量。而AI算力&#xff0c;作为支撑AI技术发展的基石&#xff0c;其重要性不言而喻。本文将带您深入了解AI算力的概念、作用、发展趋势以及对各行业的影响。 一、AI算力的定义…

同城交易小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;商家管理&#xff0c;用户管理&#xff0c;商品分类管理&#xff0c;商品信息管理&#xff0c;订单管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;商品信息&#xff0…

【Linux】常见指令

目录 一、指令的理解二、Linux的目录结构三、XShell 下的热键四、shell命令以及运行原理五、Linux常见的指令汇总1. ls 指令1.1 常见的一些有关 ls 的别名1.2 隐藏文件或目录1.3 * 的匹配 2. pwd 指令3. cd 指令3.1 cd . . 指令 4. touch指令5. mkdir指令6. rmdir指令 &&am…

21LTR-Scene打靶渗透【附POC】(权限提升)

靶机下载地址&#xff1a;21LTR: Scene 1 ~ VulnHub21LTR: Scene 1, made by JayMaster2000. Download & walkthrough links are available.https://www.vulnhub.com/entry/21ltr-scene-1,3/ 1. 主机发现端口扫描目录扫描【192.168.2.120】 1.1. 主机发现 nmap -sn 192.…

数据结构----------贪心算法

什么是贪心算法&#xff1f; 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在问题求解过程中&#xff0c;每一步都采取当前状态下最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致最终的全局最优解的算法策略。 贪心算法的核心思想是做选择时&…

08.SQL注入-下(超详细!!!)

1、Access注入 1.1 判断是否存在注入漏洞 ?id10 and 11 //不报错 ?id10 and 12 //报错1.2 判断字段数 ?id10 order by 1 ... ?id10 order by 7 //不报错 ?id10 order by 8 //报错 说明有7个字段1.3 猜表名 ?id10 and exists(select * from administrator) …

用队列实现栈

1 .思路及目的 用两个标准的队列&#xff08;先进先出&#xff09;实现栈&#xff08;后进先出&#xff09; 始终保持一个队列为空&#xff0c;往非空的栈插入数据 删除数据时&#xff0c;将数据导入另一个队列&#xff0c;留下最后一个数据&#xff08;这个数据就是要删除的…

各种排序算法【持续更新中.....】

1.归并排序 归并排序 &#xff0c;归并排序是采用分治法(Divide and Conquer&#xff09;的一个非常典型的应用&#xff0c;所以我们先来说一下什么是分治法。 分治法 定义 分治&#xff08;英语&#xff1a;Divide and Conquer&#xff09;&#xff0c;字面上的解释是「分…

什么情况?我代码没了

前两天检视代码时&#xff0c;发现PR里面有两个提交的描述信息一模一样&#xff0c;于是我提出应该将这两个提交合并成一个&#xff0c;保持提交树的清晰。 1 先储存起来&#xff01; 而同事这时正在开发别的特性&#xff0c;工作区不是干净的&#xff0c;没法直接执行 git r…

xss漏洞(二,xss靶场搭建以及简单利用)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 一&#xff0c;环境搭建。 使用工具&#xff1a;PHP study&#xff0c;dvwa靶场。 1&#xff0c;GitHub上下载dvwa到PHP study的WWW文件夹内&#xff0c;并解压。 dvwa下载地址 …