zoukankan      html  css  js  c++  java
  • 《面向对象程序设计》课程作业(七)

    GitHub

    •请将随机生成数字、表达式的部分设计成:一个Random基类,基类中有random()方法。并由该基类派生出RandomNumber类、RandomOperation类,继承并覆盖父类方法。

    代码

    #include <iostream>
    #include <sstream>
    #include <stdlib.h>
    #include<time.h>
    
    using namespace std;
    
    class Random
    {
    protected:
    	int digit;
    public:
    	Random(){digit = rand() % 3 + 4;}
    	~Random(){}
    	void random();
    };
    
    class RandomNumber:public Random
    {
    protected:
    	int digit2;
    	int nums[10];
    public:
    	RandomNumber(){digit2=digit;}
    	~RandomNumber(){}
    	void randomN();
    };
    
    void RandomNumber::randomN()
    {
    for (int i = 0; i<digit; i++)
    {
    	nums[i] = rand()%9+1;    // 数字
    }
    }
    
    class RandomOperation:public Random
    {
    protected:
    	char signs[10];
    public:
    	RandomOperation(){}
    	~RandomOperation(){}
    	void randomO(); 
    };
    
    void RandomOperation::randomO()
    {
    	char c[] = "+-*/";
    	for (int i = 0; i<digit; i++)
    	{
    		signs[i] = c[rand() % 4]; //符号
    	}
    	signs[digit] = '=';
    }
    
    class Expression:public RandomOperation,public RandomNumber
    {
    private:
    	string equ;
    	stringstream str;
    public:
    	Expression(){}
    	~Expression(){}
    	void getExpression();
    };
    
    void Expression::getExpression()
    {	
    int	braO,braT;
    randomN();
    randomO(); 
    int bracketNum =rand()%2;    //括号个数 
    if (bracketNum == 1)
    {
    	braO = rand() % (digit2 - 2) + 1;
    	braT = braO + rand() % (digit2 - braO) + 1;
    	//braO是第一个括号的位置,braT是第二个括号的位置
    }
    for (int i = 0; i<digit2; i++)
    {
    	if (bracketNum != 0 && i == braO - 1)
    		str << "(";
    	str << nums[i];
    	if (bracketNum != 0 && i == braT - 1)
    		str << ")";
    	if (i != digit2 - 1)
    		str << signs[i + 1];
    }
        str <<"=";
    str >> equ;
    cout<<equ;
    }
    
    int main()
    {
    srand((unsigned(time(NULL))));
    Expression exp;
    exp.getExpression();
    return 0;
    } 
    

    •学习简单工厂模式,思考能否将该模式运用到题目的第一点要求中。

    其实简单工厂模式也是类的一种。

    优点:用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。客户端要使用使用数据时,只需要和工厂进行交互即可,这就导致操作步骤得到极大的简化。

    缺点:一旦这个工厂出了问题,所有的客户端都会受到牵连;所以,简单工厂模式违背了“开放封闭原则”,因为当新增加一个产品的时候必须修改工厂类,相应的工厂类就需要重新编译一遍。

    附上学习的blog:

    简单工厂模式

    详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)

    百度百科

  • 相关阅读:
    14 循环结构
    12.Maps
    11 Lists
    10 正则表达式
    8 Operator overloading
    9 Strings
    7 数据类型
    6 GPath
    4 练习: 使用eclipse开发
    5 类、对象、方法
  • 原文地址:https://www.cnblogs.com/ctsyx/p/6973936.html
Copyright © 2011-2022 走看看