课程第七次作业

课程第七次作业

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());
原文地址:https://www.cnblogs.com/mercuialC/p/6973352.html