一、工厂模式中,利用宏定义来创建工厂可以减少重复,方便以后的维护
#define DEFINE_FACTORY(FIGURE)\
class FIGURE##Factory : public FigureFactory\
{\
public:\
FIGURE##Factory(const std::string name,int id)\
: FigureFactory(name,id){}\
virtual Figure *createFigure()\
{\
return new FIGURE;\
}\
};
注:“\”表示联行,为了方便宏在定义时可以把后面所有内容都包括
今后只要写如下代码即可。以创建Circle为例:
DEFINE_FACTORY(Circle)
宏定义存在的问题:
只是简单的代码替换,如果出错,无法通过编译器获知
泛型设计
- 类属性
- 一个程序实体能对多种类型的数据进行操作或描述的特性
- 类属性设计
- 或泛型程序设计, Generic Programming
具有类属性的函数实体
用指针实现类属函数的不安全性,引出模板
template<class T>
T max(T a, T b)
{
return a > b ? a : b;
}
template <class T1, class T2, ...>
<返回值类型><函数名>(<参数>)
{
...
}
模板的实例化
隐式实例化与显式实例化
如之前的例子,就是隐式实例化的例子
隐式实例化会有参数不明确的错误
max(3, 4.4)
3为整数,而4.4为浮点数,编译器会报错
显式转换:
max<int>(3, 4.4)
注意:
模板必须有完整的实现,其定义一般应该直接放在.h文件中,而不能申明定义分开。
带非类型参数的函数模板
template <class T, int size>
void f(T a) **
类模板
template<class T>
FigureFactory %CreateFactory(T a)
{
return new Factory<T>;
}
老师最后的补充:
设计和算法才是程序的重点
有精力的话把算法看看是很好的
推荐: 算法导论: introduction to algorithm
有空的时候就可以看看
如果算法有一定基础的,可以看看:计算机程序设计艺术 TAOCP