第四次课程作业

本文分享了一个面向对象编程的实践案例,作者通过改进项目结构,使其更符合面向对象的设计原则。项目包括三个主要类:Interface、Equation 和 Fraction,分别负责界面交互、整数运算和分数运算。

第四次课程作业

github仓库 arithmatic3.0

首先要谢谢老师给我了一周的时间进行一次大的改进,这次改进是我的项目更像是面向对象的项目,也更符合现在的水平,具体这次改动和有很多的经验我会再另发一篇博客进行说明,当然改动后最直接的成果就是本次作业不用改动,不废话,上图。

类图

1093463-20170514193713519-1334372668.png

这个就是我的类图,很简洁,分为三个类,去掉了所有的全局变量和静态变量,类之间没有影响,不需要在一个类中引用另一个类的属性,当然本来就不能,全定为private了,这里我没有定公有属性是因为我认为没有必要,三个类之间不需要传递消息,只需要主函数知道有init,result,和check的方法就可以了,知道了运算方法或者成员属性也没用,所以只有主函数中才会实例化三个类,只有主函数可以调用一个类的成员函数。

几个类的介绍:

  1. interface类是除了算式,其他的界面输出,当然语言的获取是输出的前提,所以有关语言的函数作为私有成员函数保存,first是程序刚开始的与使用者交互界面,mid每一道题结果告知界面,finally是最后统计结果界面。
  2. equation类是处理整数算式的类,和我上面的流程图一样,外部只可以调用init和result类,而不需要知道关于计算的成员方法。
  3. 与equation类相似,也只留下一个init和result方法。
程序实现

1093463-20170514203431160-1778175826.png

代码实现

这是主函数的构想

int main()
{
    Interface inter;
    int n = inter.first();             //多少题
    for (int j = 0;j < n;j++)
    {
        Fraction fra;
        Equation equ;
        {
            equ.initequation();       //初始化整数算式
            result=equ.result();      //计算并返回答案
        }
        else
        {
            fra.initFraction();       //初始化分数算式
            result=fra.result();      //计算并返回答案
        }
        inter.mid(answer,result);     //当前答案结果输出
    }
    inter.finally();
}

这是主函数代码(与构想一致)

#include "stdafx.h"
#include "equation.h"
#include "Fraction.h"
#include "Interface.h"
#include <time.h>
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;

int main()
{
    Interface inter;

    double result;

    int n = inter.first();                  //多少题
    srand((unsigned(time(NULL))));
    for (int j = 0;j < n;j++)
    {
        Fraction fra;
        equation equ;
        int judge = rand() % 5;       //出现分数运算的几率,目前1/5
        if (judge != -1)
        {
            equ.initequation();       //初始化整数算式
            result=equ.result();      //计算并返回答案
        }
        else
        {
            fra.initFraction();       //初始化分数算式
            result=fra.result();      //计算并返回答案
        }
        int answer;
        cin >>answer;
        inter.mid(answer,result);     //当前答案结果输出
        cout << endl;
    }
    inter.finally();
    return 0;
}

转载于:https://www.cnblogs.com/hi-reader/p/6853845.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值