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 ...
随机推荐
- Mac上Safari不能关键字搜索
今天打开Mac,用Safari浏览器搜索的时发现不能进行关键字搜索,搜索栏只能打开网址. 现在问题已经解决,只要删除Safari上的cookies就可以了.操作步骤如下: Safari ->pr ...
- PL/SQL语言基础
PL/SQL语言基础 进行PL/SQL编程前,要打开输出set serveroutput on 1.创建一个匿名PL/SQL块,将下列字符输出到屏幕:"My PL/SQL Block Wor ...
- ASP.NET Core3.1使用IdentityServer4中间件系列随笔(四):创建使用[ResourceOwnerPassword-资源所有者密码凭证]授权模式的客户端
配套源码:https://gitee.com/jardeng/IdentitySolution 本篇将创建使用[ResourceOwnerPassword-资源所有者密码凭证]授权模式的客户端,来对受 ...
- 焦大:做SEO应该研究的用户需求的方向
http://www.wocaoseo.com/thread-60-1-1.html 最近收到打击很大,收获也颇多,这一切都莫过于用户需求的问题.我曾经给我弟说过,我对检索排名特征识别.提取和计算自认 ...
- elementUI table怎么实现点击上移下移
其实炒鸡简单... <el-table :data='tableData' > ... ... <el-table-column label="操作" al ...
- [PyTorch 学习笔记] 3.2 卷积层
本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson3/nn_layers_convolution.py 这篇文 ...
- 【译】ASP.NET Core updates in .NET 5 Preview 8
.NET 5 预览版 8 现在已经可以获取了,并且已经准备好接受评估.下面列出了本次发布的新特性: 使用 Microsoft.Identity.Web 进行 Azure Active Director ...
- CPU有个禁区,内核权限也无法进入!
神秘项目 我是CPU一号车间的阿Q,是的,我又来了. 最近一段时间,我几次下班约隔壁二号车间虎子,他都推脱没有时间,不过也没看见他在忙个啥. 前几天,我又去找他,还是没看到他人,却意外地在他桌上发现了 ...
- Android开发值利用Intent进行put传值,setclass启动activity,并用get进行取值
传值方法一 [java] Intent intent = new Intent(); Bundle bundle = new Bundle(); //该类用作携带数据 bundle.putString ...
- Netty学习笔记-入门版
目录 Netty学习笔记 前言 什么是Netty IO基础 概念说明 IO简单介绍 用户空间与内核空间 进程(Process) 线程(thread) 程序和进程 进程切换 进程阻塞 文件描述符 文件句 ...