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.计算机类(利用多态实现)的更多相关文章

  1. C++ //多态案例 -计算器类(普通写法 和 多态写法) //利用多态实现计算器 //多态好处: //1.组织结构清晰 //2.可读性强 //3.对于前期和后期扩展以及维护性高

    1 //多态案例 -计算器类(普通写法 和 多态写法) 2 3 #include <iostream> 4 #include <string> 5 using namespac ...

  2. .NET Core CSharp初级篇 1-6 类的多态与继承

    .NET Core CSharp初级篇 1-6 本节内容为类的多态与继承 简介 终于讲到了面向对象三大特性中的两大特性--继承与多态.通过继承与多态,我们能很好的将类的拓展性发挥到了极致.在下面的内容 ...

  3. day18-Python运维开发基础(单继承 / 多继承 / 菱形继承、类的多态)

    1. 单继承 / 多继承 / 菱形继承 # ### 继承 : 一个类除了自身所拥有的属性方法之外,还获取了另外一个类的成员属性和方法 """ 一个类可以继承另外一个类,那 ...

  4. [Z] 计算机类会议期刊根据引用数排名

    一位cornell的教授做的计算机类期刊会议依据Microsoft Research引用数的排名 link:http://www.cs.cornell.edu/andru/csconf.html Th ...

  5. C# 类的多态、结构、接口、抽象、虚函数总结

    多态: 类的多态是通过在子类(派生类)中重载基类的虚方法或成员函数来实现的. 可见,重载和虚函数的重写,并在调用时用父类装箱子类对象,是实现多态的一种重要的编程方式. 接口: 接口是一种用来定义程序的 ...

  6. Python类的多态的例子

    1 # -*- coding: utf-8 -*- 2 # 类的多态 3 4 # 定义Person父类 5 class Person(object): 6 def __init__(self, nam ...

  7. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

  8. 读研 or 工作?对计算机类专业学习的看法

    先来介绍一下自己 中南大学(不知名985双一流 A 类)大二计算机专业本科生,才学编程1年多一点.大一的时候搞了大半年 ACM,现在慢慢转向项目开发(在学习 JAVA 开发,U3D 和 C#),同时在 ...

  9. Python 类的多态的运用

    #类的多态的运用 #汽车类 class Car(object): def move(self): print("move ...") #汽车商店类 class CarStore(o ...

随机推荐

  1. arduino智能循迹小车代码(三个循迹模块)

    #include <Servo.h>int leftMotor1 = 3;int leftMotor2 = 5;int rightMotor1 = 6;int rightMotor2 = ...

  2. mysql数据库中数据类型的长度

    在mysql中新建数据表的时候会有长度一说,其实用建表语句建数据表的时候也有涉及 例如: CREATE TABLE user( uid int(4), name varchar(255), passw ...

  3. Navicat12 for Mysql激活

    1      下载 注册机和Navicat网盘下载地址 链接:https://pan.baidu.com/s/1AFpQIlHCXVHc8OuBZ9PAlA  提取码:xvi2 2      安装 2 ...

  4. 兄弟们,我打算抠100个网站JS加密代码召唤,一个也跑不掉,这次轮到小虎牙

    摘要:友情提示:在博客园更新比较慢,有兴趣的关注知识图谱与大数据公众号吧.本次研究虎牙登录密码加密JS代码,难度不大,依然建议各位读者参考文章独自完成,实在抠不出来再参考这里的完整代码:从今天开始种树 ...

  5. istio的安全(概念)

    Istio 安全(概念) 目录 Istio 安全(概念) 高层架构 Istio身份 身份和证书管理 认证 Mutial TLS认证 宽容(Permissive)模式 安全命名 认证架构 认证策略 策略 ...

  6. Laravel chunk和chunkById的坑

    Laravel chunk和chunkById的坑 公司中的项目在逐渐的向Laravel框架进行迁移.在编写定时任务脚本的时候,用到了chunk和chunkById的API,记录一下踩到的坑. 一.前 ...

  7. CSDN自定义栏目代码

    今天终于发现了csdn可以操作的地方,有个自定义栏目的地方可以贴HTML代码(只允许最多一个自定义栏目),不能用JS插件 有点难受,就贴了下自己的微信,并且可以直接点击图片发起会话 以下是我的代码,可 ...

  8. [V&N公开赛] CheckIn

    V&N战队考核+招新,赵师傅出的Web题,做着感觉有点顶,趁热打铁写write up记录一下考察的知识点 这道题说是CheckIn其实还是有一定难度的(也可能是我太菜了),进入题目直接给出了f ...

  9. 前端code导入excel

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 01vue.config.js

      const path = require('path'); module.exports = { // 基本路径 publicPath: process.env.NODE_ENV === 'pro ...