【C++】模板简述(一):模板的引入
2024-09-07 18:28:35
我们在介绍模板之前,首先想象有这么一个场景:
我们需要通过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.当出现编译性问题时,不容易定位.
因此,通过以上方法我们发现:要想完美的解决这个问题,不来点新东西,是绝对不行的.所以,我们来介绍一下泛型编程:
泛型编程:编写与类型无关的逻辑代码,是代码复用的一种手段.而模板是泛型编程的基础.
那么模板是什么?怎么用呢?我们下篇文章介绍.
最新文章
- BZOJ 1015 并查集+离线倒序
- C语言实现快速排序
- php中json_decode()和json_encode()的使用方法
- POJ 3187 杨辉三角+枚举排列 好题
- Ubuntu14.04下安装QQ 国际版
- 对于接收到的GPS信息详解
- 聊聊 KVC 和 KVO 的高阶应用
- JavaEE Tutorials (21) - Java EE安全:高级主题
- Win10系统下安装Oracle服务器和Oracle客户端
- MySQL、PHP入门
- linux(三)之linux常用命令二
- linux磁盘及分区详解
- Python命令行参数解析模块argparse
- python基础篇_003_函数
- RESTful架构详解
- .NET获取当前程序所在电脑的CPU和内存使用率
- java第七周动手动脑
- Delphi中有关窗口绘制
- 牛客网_Go语言相关练习_判断&;选择题(4)
- 【转载】 Pytorch(0)降低学习率torch.optim.lr_scheduler.ReduceLROnPlateau类
热门文章
- make eval builtin function
- Test redis
- mysql连接com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link
- Visual C++ 2010入门教程
- java代码实现JDBC连接MySql以及引用驱动程序包
- BZOJ_3172_[Tjoi2013]单词_后缀自动机
- bzoj1007 [HNOI2008]水平可见直线——单调栈
- 思维导图js
- zoj 3866
- U3D中碰撞体和刚体的关系