c++之模板
2016-03-23 18:16
246 查看
首先看一个例子:
我们发现在比较a,b是否相等时,因它们的类型不确定,必须得写出多个函数。而这些函数出了参数的类型以及返回值类型不同外,其他都相同。这样使程序看起来繁琐,是否有方法完成既可以使程序简洁而且还能以上不同类型比较功能呢?当然有呀。那就是模板。
所谓模板,就相当于公式一样。模板编程也叫泛型编程。可以处理在编写程序时类型不知道的情况,在编译时就能获取类型。
所以:
以上程序可以用下面的函数模板代替:
调用时:
2. 模板分为函数模板和模板类。
(1)函数模板
格式:template <typename T1,typename T2,...>
返回类型 函数名(参数列表)
{函数体}
调用时:
equal(1,2);
T1,T2类型不同时,
调用时:
equal(1,(int)2.3); equal<int>(2,2.5);//显示实例化
(2)模板类
格式:template <typename T1,typename T2,...>
class 类名{};
3.模板编译
当编译器遇到一个模板的定义时,不会为其生成代码,而是在我们实例化模板的一个特例时,编译器才会生成代码。
通常,当我们调用一个普通函数时,只要知道掌握了函数的声明。在定义一个类类型的对象时,我们可以将类定义和普通函数声明放在头文件,而将函数的定义以及类的成员函数的定义放在类外。但是模板不同,为了生成一个实例化的对象,编译器需要知道函数模板和类模板的成员函数的定义,所以应将类的定义,类成员函数的定义,普通函数的声明,定义都应放在头文件中。
我们发现在比较a,b是否相等时,因它们的类型不确定,必须得写出多个函数。而这些函数出了参数的类型以及返回值类型不同外,其他都相同。这样使程序看起来繁琐,是否有方法完成既可以使程序简洁而且还能以上不同类型比较功能呢?当然有呀。那就是模板。
所谓模板,就相当于公式一样。模板编程也叫泛型编程。可以处理在编写程序时类型不知道的情况,在编译时就能获取类型。
所以:
以上程序可以用下面的函数模板代替:
调用时:
2. 模板分为函数模板和模板类。
(1)函数模板
格式:template <typename T1,typename T2,...>
返回类型 函数名(参数列表)
{函数体}
调用时:
equal(1,2);
T1,T2类型不同时,
调用时:
equal(1,(int)2.3); equal<int>(2,2.5);//显示实例化
(2)模板类
格式:template <typename T1,typename T2,...>
class 类名{};
3.模板编译
当编译器遇到一个模板的定义时,不会为其生成代码,而是在我们实例化模板的一个特例时,编译器才会生成代码。
通常,当我们调用一个普通函数时,只要知道掌握了函数的声明。在定义一个类类型的对象时,我们可以将类定义和普通函数声明放在头文件,而将函数的定义以及类的成员函数的定义放在类外。但是模板不同,为了生成一个实例化的对象,编译器需要知道函数模板和类模板的成员函数的定义,所以应将类的定义,类成员函数的定义,普通函数的声明,定义都应放在头文件中。
相关文章推荐
- 设计模式之行为型模式 - 调用行为的传递问题
- [div+css]晒晒最新制作专题推广页模板
- 2008大学生入党申请书 模板
- IMAIL多语言模板两套Outlook&Gmail模板下载
- 在PHP中使用模板的方法
- 深入解析php模板技术原理【一】
- Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
- 在ASP中不用模板生成HTML静态页直接生成.html页面
- C#模板方法模式(Template Method Pattern)实例教程
- javascript文本模板用法实例
- 关于Asp代码与页面的分离模板技术第1/3页
- php模板原理讲解
- 需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
- DataGrid 动态添加模板列 实现代码
- 详解java模板和回调机制
- C++模板之特化与偏特化详解
- vs.net2008添加模板方法
- ThinkPHP模板判断输出Empty标签用法详解
- ThinkPHP模板范围判断输出In标签与Range标签用法详解
- thinkphp模板用法和内容输出实例