2017《面向对象程序设计》课程作业七
简单工厂模式的理解
首先安利一篇有关简单工厂模式的博文,比较简面用C++概述了简单工厂模式。而我相对于对这种模式的认知,更多的也是基于一种实例化对象的方法,也是我接触的第一种工厂模式。如题目中的意思所说,基类Random像是一间工厂,而工厂所生产的产品则有RandomNumber类、RandomOperation类,所共同具有的功能即为random(),而工厂则分别判断对象来创建不同的产品并且使用其功能。而我们作为使用这些产品的人则不用关注产品实现的过程,而只是通过使用父类的指针来完成这样的一件事情。这样做也能降低了板块之间的耦合程度,挺符合低耦合的程序设计理念。
class Random
{
public:
virtual void random() {}//基类虚函数
Random() { tempf = 1; }
private:
int tempf;
};
class RandomNumber :public Random
{
public:
void random();//派生类RandomNumber的覆盖
void get_n(int &a, int &b, int &c, int &d);
private:
int tempa,tempb,tempc,tempd;
};
class RandomOperation :public Random
{
public:
void random();//派生类RandomOperation的覆盖
void get_o(string &temp);
private:
string tempo;
};
通过使用虚函数来实现多态,并且在函数中使用父类的指针来完成子类的random
Random *r; //父类指针
r = new RandomNumber;
r->random();//通过父类指针接口实现函数
git链接
继承和多态的思想
在我个人的理解上,继承与多态是密不可分的,继承是通过子类继承父类,使子类具有父类的各自属性,简化了代码,优化了性能。而多态则是实例化一个接口,通过执行不同的操作,很好增加了程序的可拓展性,并且运行速度快,灵活度高,降低了程序的耦合程度,实现高内聚,低耦合。这些也是C++4个特性中较为重要的两个地方。在继承方面我也发现了虚函数的重要作用,对于虚函数调用来说,每一个对象内部都有一个虚表指针,虚表可以继承,如果子类没有重写虚函数,那么子类虚表中仍然会有该函数的地址,只不过这个地址指向的是基类的虚函数实现。
感想
通过这次作业,很好将上次课程中刚学习到的继承的知识应用到了博客作业当中,同时也了解了一下多态以及虚函数的使用,(当然之前学过的运算符重再也算是多态的实现吧)这些都是在实践简单工厂模式的过程中逐步学习的,也算是learning by doing吧