C++练习案例1.计算机类(利用多态实现)
c++简单计算机类
简介
大家好,这里是天天like的博客,这是我发的第一篇随笔,用来记录我的学习日程,大家可以相互学习,多多交流,感谢
今天我要记录的随笔是在学习c++多态的知识点练习改进的一个案例。在写代码的过程中是感觉到思路清晰明确,要修改的时候能够快速的找到所需要的代码块。
1.首先搭建出大致的框架
void menu()
{
cout << "*******************************"<< endl
<< "****** 1.加法 ******"<< endl
<< "****** 2.减法 ******"<< endl
<< "****** 3.乘法 ******"<< endl
<< "****** 4.除法 ******"<< endl
<< "****** 5.取余 ******"<< endl
<< "****** 6.乘方 ******"<< endl
<< "****** 7.开根 ******"<< endl
<< "****** 8.次幂 ******"<< endl
<< "****** 0.退出 ******"<< endl
<< "*******************************"<<endl;
}
2.接下来写计算类
①先实现个超级类(利用多态的知识,方便拓展与维护)
class AbstractCalculator //抽象计算类
{
public:
virtual int getRusult() //这里要写virtual关键字,方便下面的类继承时的同名函数进行重写
{
return 0;
}
int m_A; //定义两个变量
int m_B;
};
②开始继承父亲的财产
class AddCalculator : public AbstractCalculator //addition 加法
{
public:
int getRusult()
{
return m_A + m_B;
}
};
class SubCalculator : public AbstractCalculator //subtraction 减法
{
public:
int getRusult()
{
return m_A - m_B;
}
};
class MulCalculator : public AbstractCalculator //multiplication 乘法
{
public:
int getRusult()
{
return m_A * m_B;
}
};
class DivCalculator : public AbstractCalculator //division 除法
{
public:
int getRusult()
{
return m_A / m_B;
}
};
class SurCalculator : public AbstractCalculator //Surplus 取余
{
public:
int getRusult()
{
return m_A % m_B;
}
};
class PowCalculator : public AbstractCalculator //Power 乘方
{
public:
int getRusult()
{
return m_A * m_A;
}
};
class SqrtCalculator : public AbstractCalculator //Sqrt 开根
{
public:
int getRusult()
{
return sqrt(m_A);
}
};
class PowpCalculator : public AbstractCalculator //Powp 次幂
{
public:
int getRusult()
{
return pow(m_A,m_B); //计算m_A的m_B次方
}
};
3.实现功能
① 分别用不同函数实现不同功能
void Add(int a,int b)
{
cout << "请输入a值:";
cin >> a;
cout << "请输入b值:";
cin >> b;
AbstractCalculator* p = new AddCalculator; //加法
p->m_A = a;
p->m_B = b;
cout <<endl << p->m_A << " + " << p->m_B << " = " << p->getRusult() << endl << endl;
delete p;
cout << "加法操作完成,稍等请按任意键清屏" << endl;
system("pause");
system("cls");
}
void Sub(int a, int b)
{
cout << "请输入a值:";
cin >> a;
cout << "请输入b值:";
cin >> b;
AbstractCalculator* p = new SubCalculator; //减法
p->m_A = a;
p->m_B = b;
cout << endl << p->m_A << " - " << p->m_B << " = " << p->getRusult() << endl << endl;
delete p;
cout << "减法操作完成,稍等请按任意键清屏" << endl;
system("pause");
system("cls");
}
void Mul(int a, int b)
{
cout << "请输入a值:";
cin >> a;
cout << "请输入b值:";
cin >> b;
AbstractCalculator* p = new MulCalculator; //乘法
p->m_A = a;
p->m_B = b;
cout <<endl << p->m_A << " * " << p->m_B << " = " << p->getRusult() << endl << endl;
delete p;
cout << "乘法操作完成,稍等请按任意键清屏" << endl;
system("pause");
system("cls");
}
void Div(int a, int b)
{
cout << "请输入a值:";
cin >> a;
cout << "请输入b值:";
cin >> b;
AbstractCalculator* p = new DivCalculator; //除法
p->m_A = a;
p->m_B = b;
cout <<endl << p->m_A << " / " << p->m_B << " = " << p->getRusult() << endl << endl;
delete p;
cout << "除法操作完成,稍等请按任意键清屏" << endl;
system("pause");
system("cls");
}
void Sur(int a, int b)
{
cout << "请输入a值:";
cin >> a;
cout << "请输入b值:";
cin >> b;
AbstractCalculator* p = new SurCalculator; //取余
p->m_A = a;
p->m_B = b;
cout <<endl << p->m_A << " % " << p->m_B << " = " << p->getRusult() << endl << endl;
delete p;
cout << "取余操作完成,稍等请按任意键清屏" << endl;
system("pause");
system("cls");
}
void Pow(int a)
{
cout << "请输入a值:";
cin >> a;
AbstractCalculator* p = new PowCalculator; //乘方
p->m_A = a;
cout <<endl << p->m_A << "的乘方:" << p->getRusult() << endl << endl;
delete p;
cout << "乘方操作完成,稍等请按任意键清屏" << endl;
system("pause");
system("cls");
}
void sqrt1(int a)
{
cout << "请输入a值:";
cin >> a;
AbstractCalculator* p = new SqrtCalculator; //开根
p->m_A = a;
cout <<endl << p->m_A << "的开根结果为:" << p->getRusult() << endl << endl;
delete p;
cout << "开根操作完成,稍等请按任意键清屏" << endl;
system("pause");
system("cls");
}
void Pow1(int a, int b)
{
cout << "请输入a值:";
cin >> a;
cout << "请输入b值:";
cin >> b;
AbstractCalculator* p = new PowpCalculator; //x的y次幂
p->m_A = a;
p->m_B = b;
cout <<endl << p->m_A << "的" << p->m_B << "次方为: " << p->getRusult() << endl << endl;
delete p;
cout << "次幂操作完成,稍等请按任意键清屏" << endl;
system("pause");
system("cls");
}
②接下来实现主函数
int main()
{
int select = 1;
int a = 0, b = 0;
while (true)
{
menu();
cout << "请输入选项:";
cin >> select;
switch (select)
{
case 1:
Add(a, b); //加法
break;
case 2:
Sub(a, b); //减法
break;
case 3:
Mul(a, b); //乘法
break;
case 4:
Div(a, b); //除法
break;
case 5:
Sur(a, b); //取余
break;
case 6:
Pow(a); //乘方
break;
case 7:
sqrt1(a); //开根
break;
case 8:
Pow1(a, b); //次幂
break;
case 0:
cout << "欢迎下次使用" << endl; //退出
return 0;
break;
default:
exit(0);
break;
}
}
system("pause");
return 0;
}
一些演示图


结束
以上的代码参考源为:b站黑马程序员c++学习视频
希望大家能一起相互监督学习,一起进步,加油!
C++练习案例1.计算机类(利用多态实现)的更多相关文章
- C++ //多态案例 -计算器类(普通写法 和 多态写法) //利用多态实现计算器 //多态好处: //1.组织结构清晰 //2.可读性强 //3.对于前期和后期扩展以及维护性高
1 //多态案例 -计算器类(普通写法 和 多态写法) 2 3 #include <iostream> 4 #include <string> 5 using namespac ...
- .NET Core CSharp初级篇 1-6 类的多态与继承
.NET Core CSharp初级篇 1-6 本节内容为类的多态与继承 简介 终于讲到了面向对象三大特性中的两大特性--继承与多态.通过继承与多态,我们能很好的将类的拓展性发挥到了极致.在下面的内容 ...
- day18-Python运维开发基础(单继承 / 多继承 / 菱形继承、类的多态)
1. 单继承 / 多继承 / 菱形继承 # ### 继承 : 一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法 """ 一个类可以继承另外一个类,那 ...
- [Z] 计算机类会议期刊根据引用数排名
一位cornell的教授做的计算机类期刊会议依据Microsoft Research引用数的排名 link:http://www.cs.cornell.edu/andru/csconf.html Th ...
- C# 类的多态、结构、接口、抽象、虚函数总结
多态: 类的多态是通过在子类(派生类)中重载基类的虚方法或成员函数来实现的. 可见,重载和虚函数的重写,并在调用时用父类装箱子类对象,是实现多态的一种重要的编程方式. 接口: 接口是一种用来定义程序的 ...
- Python类的多态的例子
1 # -*- coding: utf-8 -*- 2 # 类的多态 3 4 # 定义Person父类 5 class Person(object): 6 def __init__(self, nam ...
- 第二十九节:Java基础知识-类,多态,Object,数组和字符串
前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...
- 读研 or 工作?对计算机类专业学习的看法
先来介绍一下自己 中南大学(不知名985双一流 A 类)大二计算机专业本科生,才学编程1年多一点.大一的时候搞了大半年 ACM,现在慢慢转向项目开发(在学习 JAVA 开发,U3D 和 C#),同时在 ...
- Python 类的多态的运用
#类的多态的运用 #汽车类 class Car(object): def move(self): print("move ...") #汽车商店类 class CarStore(o ...
随机推荐
- ZEQP仓储管理系统( WMS)开源
ZEQP仓储管理系统 代码框架是用的前后台分离的方式 后台使用的是Asp.Net Core平台,开发所有业务,向前台提供Rest API接口. 使用的认证方式是JWT 前端有两个项目,一个是Web端, ...
- 【学习中】Unity Schedule
章节 内容 签到 第一课:界面介绍 第一讲 编辑器工作区 4月27日 第二课:资源管理 第二讲 资源及资源类型 4月27日 第三讲 资源管理:模型和角色动画的输出设置(上) 4月27日 第四讲 资源管 ...
- Fitness - 05.08
倒计时237天 运动34分钟,共计8组,3.4公里.拉伸10分钟. 每组跑步2分钟(6.6KM/h),走路2分钟(6KM/h). 最近掉了几斤,所以今天状态感觉特别好. 虽然每天在拼命学习Unity, ...
- unity 着色器内置宏
目标平台 Macro: Target platform: SHADER_API_D3D11 Direct3D 11 SHADER_API_GLCORE Desktop OpenGL “core” (G ...
- Hadoop Windows IDEA
java jdk1.8都可以了 注意jdk的路径要拷贝到一个没有空格的路径改掉JAVA_HOME系统环境变量 在etc/hadoop/hadoop_env.cmd里有设置%JAVA_HOME%了不用管 ...
- 《神经网络的梯度推导与代码验证》之CNN前向和反向传播过程的代码验证
在<神经网络的梯度推导与代码验证>之CNN的前向传播和反向梯度推导 中,我们学习了CNN的前向传播和反向梯度求导,但知识仍停留在纸面.本篇章将基于深度学习框架tensorflow验证我们所 ...
- rpc中的注册中心
使用模板模式,对注册中心进行设计,可以方便后续添加注册中心 模板抽象类,提供注册中心必要的方法. public abstract class ServiceRegistry { //这是一个模板的抽象 ...
- 2020重新出发,NOSQL,Redis主从复制
Redis主从复制 尽管 Redis 的性能很好,但是有时候依旧满足不了应用的需要,比如过多的用户进入主页,导致 Redis 被频繁访问,此时就存在大量的读操作. 对于一些热门网站的某个时刻(比如促销 ...
- 当this碰到return会发生什么
当this碰到return时 function fn(params) { this.user = 'fzy' return {} } var a = new fn console.log(a.user ...
- C# 调用SendMessage刷新任务栏图标(强制结束时图标未消失)
本文参考C++改写 https://blog.csdn.net/dpsying/article/details/20139651 (该文章的坐标理解的有误解,会导致功能无效) SendMessage ...
