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 ...
随机推荐
- Mybatis—curd
Mybatis简介: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...
- 自动部署Asp.Net Core到Docker
原文链接:个人博客:自动部署Asp.Net Core至Docker 本文简介 最近在开发一个管理系统,代码框架是用的前后台分离的方式 后台使用的是Asp.Net Core平台,开发所有业务,向前台提供 ...
- 4GL之Non-SCROLLING CURSOR
在4gl中CURSOR可以说是每一个程序中都会有的,而CURSOR又分为三种SCROLLING CURSOR.Non-SCROLLING CURSOR.LOCKING CURSOR. Non-SCRO ...
- 基于伪分布式Hadoop搭建Hive平台详细教程
一.搭建环境的前提条件 环境:Linux系统 Hadoop-2.6.0 MySQL 5.6 apache-hive-2.3.7 这里的环境不一定需要和我一样,基本版本差不多都ok的,所需安装包和压缩包 ...
- CF1349A Orac and LCM 题解
题意分析 给出$n$个数,求这$n$个数两两的最小公倍数的最大公约数 思路分析 通过分析样例可以发现,如果要成为这$n$个数两两的最小公倍数的公约数,至少要是这$n$个数中$n-1$个数的约数,否则就 ...
- 外贸网站SEO优化哪家公司好
http://www.wocaoseo.com/thread-98-1-1.html 随着b2c的崛起,越来越多的企业已经放弃挂在第三方面台销售,而是选择去建独立的商场,拥有一个属于自已 ...
- oeasy教你玩转linux010104灵魂之问whatis
灵魂之问whatis 回忆上节课 我们上次在系统里面乱转
- 【学习中】Unity<中级篇> Schedule
章节 内容 签到 Unity3D 实战技术第二版视频教程(中级篇) 1.游戏引擎发展史 2.Unity发展史 3.3D图形学与必要组件 5月19日 4.核心类_GameObject类 5月19日 5. ...
- html中实现倒计时功能(setInterval,clearInterval)
倒计时主要用到的知识点:1.设置时间间隔的setInterval可以被clearInterval取消 2.毫秒转换为时分格式 这个是效果图 下面是js中的函数 var shijian=3600; va ...
- vue学习笔记一
vue 颠覆式的开发方式 解疑 为什么要学习vue? 降低项目的复杂度 就业需要 vue难不难? 特别简单 相比于React,vue有什么优势? 前端三大框架:Angular.React.Vue Vu ...
