课程第七次作业
课程第七次作业
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;
};
工厂模式的学习
学习体会:
- 简单工厂模式的应用,能使代码的封装性更好。一个好的程序员很注重这一点,好的代码封装性能增加代码的安全性,也使合作变得更加轻松。工厂模式能统一的创建类的对象,通过传参能在工厂中创建类,返回一个类的指针。
- 基类声明的纯虚函数派生类必须实现。
思考问题:
可以将工厂模式应用与随机类的创建,通过传入来获取工厂创建完成的类的指针
学习链接
学习代码展示:
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());