zoukankan      html  css  js  c++  java
  • 课程第七次作业

    课程第七次作业

    git传送

    题目描述

    • 请将随机生成数字、表达式的部分设计成:一个Random基类,基类中有random()方法。并由该基类派生出RandomNumber类、RandomOperation类,继承并覆盖父类方法。
    • 学习简单工厂模式,思考能否将该模式运用到题目的第一点要求中。

    部分代码展示:

    class Randomvalue       //随机生成类
    {
    public:
    	Randomvalue();//初始化数字和符号
    	//int randomNumber();         //用于随机生成数字
    	//char randomOperation();     //用于随机生成运算符
    protected:
    	vector<char> sign;
    	vector<int> num;
    };
    class RandomNumber :public Randomvalue//RandomNumber类继承于Randomvalue
    {
    public:
    	RandomNumber() : Randomvalue(){}
    	int randomNumber();         //用于随机生成数字
    };
    class RandomOperation :public Randomvalue//RandomOperation类继承于Randomvalue
    {
    public:
    	RandomOperation() :Randomvalue(){}
    	char randomOperation();//用于随机生成运算符
    };
    
    class Problem
    {
    public:
    
    private:
    	string str1, str2;
    	Filestream F;
    	Randomvalue R;
    	RandomNumber r1;
    	RandomOperation r2;
    	CreatExpresstion C;
    	Mutual M;
    };
    

    工厂模式的学习

    学习体会:

    1. 简单工厂模式的应用,能使代码的封装性更好。一个好的程序员很注重这一点,好的代码封装性能增加代码的安全性,也使合作变得更加轻松。工厂模式能统一的创建类的对象,通过传参能在工厂中创建类,返回一个类的指针。
    2. 基类声明的纯虚函数派生类必须实现。

    思考问题:

    可以将工厂模式应用与随机类的创建,通过传入来获取工厂创建完成的类的指针

    学习链接

    学习代码展示:

    class RandomSimpleFactory//随机类简单工厂
    {
    public:RandomSimpleFactory(){}
    	   static Randomvalue* creatrandom(const char & x);
    };
    
    class RandomNumber :public Randomvalue//RandomNumber类继承于Randomvalue
    {
    public:
    	RandomNumber() : Randomvalue(){}
    	virtual int randomNumber();         //用于随机生成数字
    //	virtual char randomOperation();     //用于随机生成运算符
    };
    class RandomOperation :public Randomvalue//RandomOperation类继承于Randomvalue
    {
    public:
    	RandomOperation() :Randomvalue(){}
    //	virtual int randomNumber();         //用于随机生成数字
    	virtual char randomOperation();     //用于随机生成运算符
    };
    
    Randomvalue* RandomSimpleFactory::creatrandom(const char & x)//工厂模式函数实现
    	{
    		if (x == 'o')
    			return new RandomOperation();
    		else if (x == 'n')
    			return new RandomNumber();
    	}
    	
    	
    	
    Randomvalue *r1 = RandomSimpleFactory::creatrandom('n');
    	Randomvalue* r2 = RandomSimpleFactory::creatrandom('o');
    
    
    expression = Tostring(r1->randomNumber()) + Tostring(r2->randomOperation()) + Tostring(r1->randomNumber());
    
  • 相关阅读:
    Codeforces Round #678 (Div. 2)
    #Dijkstra#洛谷 4943 密室
    #线性基,点分治#洛谷 3292 [SCOI2016]幸运数字
    #线性基#LOJ 114 k大异或和
    #2-SAT,Tarjan,前缀优化建边#洛谷 6378 [PA2010]Riddle
    #树形dp,二次扫描换根法#洛谷 4284 [SHOI2014]概率充电器
    #dp#洛谷 5774 [JSOI2016]病毒感染
    #Tarjan,拓扑排序#洛谷 3436 [POI2006]PRO-Professor Szu
    #差分约束,Floyd#洛谷 2474 [SCOI2008]天平
    #Tarjan,SPFA,差分约束系统#BZOJ 2330 AcWing 368 银河
  • 原文地址:https://www.cnblogs.com/mercuialC/p/6973352.html
Copyright © 2011-2022 走看看