C++ 模板 template

一、工厂模式中,利用宏定义来创建工厂可以减少重复,方便以后的维护

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值