我们在介绍模板之前,首先想象有这么一个场景:

  我们需要通过C++写出一个通用的加法程序,那么有如下几种方法:

  方法一:C++的函数重载

//int int int
int Add(int l,int r){
return l+r;
}
//float float float
float Add(float l,float r){
return l+r;
}
//double double double
double Add(double l,double r){
return l+r;
}
//...... /*long int int
long Add(int l,int r){
return l+r;
}
*/

  通过以上实例,我们发现用C++重载有以下缺陷:

  1.每出现一个新类型,我们都必须添加一份新代码.

  2.如果函数只是返回值的类型不同,那么函数重载就无法实现.(例如:long Add(int,int)函数与int Add(int,int)函数不能同时存在)

  3.代码复用性太低,我们发现每种加法其核心代码就基本相似,只是类型不同.

  4.假设有一个加法代码有问题,那么就得修改所有的加法代码,维护起来极其不方便.

  方法二:通过宏函数进行处理

#define ADD(l,r) ((l)+(r))

  对宏有了解的童鞋就知道,宏有以下缺点:

  1.它不是函数,而是在预处理中的一种替换,因此对于某些特殊情况,计算结果会出现问题.(例如:ADD(++i,i++))

  2.它不会进行类型检测,安全性不高.

  3.当出现编译性问题时,不容易定位.

  因此,通过以上方法我们发现:要想完美的解决这个问题,不来点新东西,是绝对不行的.所以,我们来介绍一下泛型编程:

  泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段.而模板是泛型编程的基础.

  那么模板是什么?怎么用呢?我们下篇文章介绍.

最新文章

  1. BZOJ 1015 并查集+离线倒序
  2. C语言实现快速排序
  3. php中json_decode()和json_encode()的使用方法
  4. POJ 3187 杨辉三角+枚举排列 好题
  5. Ubuntu14.04下安装QQ 国际版
  6. 对于接收到的GPS信息详解
  7. 聊聊 KVC 和 KVO 的高阶应用
  8. JavaEE Tutorials (21) - Java EE安全:高级主题
  9. Win10系统下安装Oracle服务器和Oracle客户端
  10. MySQL、PHP入门
  11. linux(三)之linux常用命令二
  12. linux磁盘及分区详解
  13. Python命令行参数解析模块argparse
  14. python基础篇_003_函数
  15. RESTful架构详解
  16. .NET获取当前程序所在电脑的CPU和内存使用率
  17. java第七周动手动脑
  18. Delphi中有关窗口绘制
  19. 牛客网_Go语言相关练习_判断&选择题(4)
  20. 【转载】 Pytorch(0)降低学习率torch.optim.lr_scheduler.ReduceLROnPlateau类

热门文章

  1. make eval builtin function
  2. Test redis
  3. mysql连接com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link
  4. Visual C++ 2010入门教程
  5. java代码实现JDBC连接MySql以及引用驱动程序包
  6. BZOJ_3172_[Tjoi2013]单词_后缀自动机
  7. bzoj1007 [HNOI2008]水平可见直线——单调栈
  8. 思维导图js
  9. zoj 3866
  10. U3D中碰撞体和刚体的关系