第七次课程作业
题目描述
1.请将随机生成数字、表达式的部分设计成:
一个Random基类,基类中有random()方法。并由该基类派生出RandomNumber类、RandomOperation类,继承并覆盖父类方法。
2.学习简单工厂模式,思考能否将该模式运用到题目的第一点要求中。
其实最开始看到这次作业我是感觉很牵强的要我们强行加一个Random()类,然后要求我们强行派生,没有思路。但静静的想了想并尝试了感觉是最简易的派生方式了hhh,如下:
/*一个Random()基类,包含随机方法*/
class Random
{
public:
virtual int RandomNum() {return 1;};
virtual char RandomOperator() {return ' ';};
};
/*Random()下的一个子类,用于随机生成数字*/
class RandomNumber:public Random
{
public:
//随机生成一个数字,范围在0~10之间
int RandomNum();
/*{
srand(RandomeSeed());
int randNum;
randNum = rand() % 11;
return randNum;
}*/
};
/*Random()下的另一个子类,用于随机生成操作符*/
class RandomOper :public Random
{
public:
//随机生成一个操作符并返回,返回类型为char
char RandomOperator();
/*{
int randOperIndex;
srand(RandomeSeed());
randOperIndex = rand() % operListLen;
return rand_Oper_List[randOperIndex];
}*/
};
这放在同一个Expression.h文件中的class声明,然后再Expression.cpp中对两个类中的随机生成方法进行定义。
/*随机生成一个数字,范围0~10*/
int RandomNumber::RandomNum()
{
srand(RandomeSeed());
int randNum;
randNum = rand() % 11;
return randNum;
}
///*随机生成一个操作符并返回,返回值类型char*/
char RandomOper::RandomOperator()
{
int randOperIndex;
srand(RandomeSeed());
randOperIndex = rand() % operListLen;
return rand_Oper_List[randOperIndex];
}
运行结果截图如下:
简单工厂模式:
在网上简单的查阅了一些有关于简单工厂模式的资料,但是还没有理解的很透彻,就简单的说一下目前我的理解收获吧:
1.通过工厂模式隐藏类对象创建时的细节,用户不需要了解其中的细节,只需要知道用的是哪一个工厂就行了。(只需要通过参数传参的形式就可以进行一些修改)
2.对于子类的分块化及后续添加一些新子类 比较方便。
简单工厂模式和我们的四则运算相关联我的想法是:建立一个工厂类,其中有随机生成操作数字,随机生成操作符,随机生成一个操作part等等,在需要处只需通过参数的形式调用工厂类中的子类即可,具体还没有实现。
由于还没有很深的理解及运用简单工厂模式,所以对于其一些缺点还没有很好的认识,只是根据一些网还是那个参考的资料有一些模糊的概念。
参考简单工厂模式的博客链接1
另外对于上次的图形界面的设计由于遇到一些编译器上缺乏dll文件的困难没有实现,已经向郁杨同学请教并解决了这个问题,接下来将会实现图形界面设计。