模板
2016-02-23 18:39
423 查看
函数模板: template<typename T> 类型 函数名(形参列表) { } 类模板: template<class T> 类型 函数名(形参列表) { } |
//template关键字告诉c++编译器,现在开始泛型编程 //typename 告诉c++编译器,T为类型(T为类型,可以参数化,int float),你不要乱报错 //类型参数化。。。。。。。 template<typename T> void swap2(T &a, T &b) { T c; c = a; a = b; b = c; } void main() { //泛型编程的调用方式有两种 //1自动类型推导 int x =1, y =2; swap2(x, y); printf("x:%d y:%d \n", x, y); float x1= 1.0, y1 = 2.0; //2具体类型调用 swap2<float>(x1, y1); printf("x1:%f y1:%f \n", x1, y1); system("pause"); } |
模板函数可以像普通函数一样被重载!!! 重载函数模板匹配约定: 1先找匹配的函数 2如果没找到找匹配的模板函数 3如果没找到找可以类型转换进行参数匹配的重载函数 |
函数模板的本质 |
一,编译器并不能将函数模板编译成能处理任何类型的函数 二,编译器会根据真正使用函数模板的地方将函数模板编译成多个不同的函数 编译器会对函数模板进行两次编译: 1 在函数模板声明处进行语法扫描 2 在调用的地方对参数替换后的代码进行编译 |
类模板 |
template<typename T> class Tclass { Private: T name;//类属性至少要在类说明中出现一次 } |
#include <iostream> using namespace std; //定义一个类模板 template<typename T> class AA { public: AA(T a) { this->a = a; } void setA(T a) { this->a = a; } T getA() { return this->a } protected: private: T a; }; class BB : public AA<int> { public: //BB(int a, int b) : AA(a) BB(int a, int b) : AA<int>(a) //实例化B就要用B的类型先实例化A { this->b = b; } private: int b; }; void main() { //要把类模板具体成类型后,才能定义变量 AA<int> a(10); BB b1(1, 2); system("pause"); } |
相关文章推荐
- 类模板遇上友元函数
- 查看java进程的所有信息
- LeetCode Algorithms #326 <Power of Three>
- nginx的两种配置用户权限访问
- At24lc512存储器访问内部地址方法---i2c通信获取
- RedhatEnterpriseLinux7安装系统过程的日志
- 面试题
- HTML基础(jQuery)
- markdown简单常用语法
- IE浏览器对域名的限制
- iOS开发-加密与解密之CommonCrypto与Security.framework
- Redis主从同步原理
- 【项目管理】现网故障处理
- 关于 断点续传上传与秒传 你绕不过去的坎 html5+php
- 关于ALAsset的ALAssetPropertyAssetURL如何获取图片
- UIAlertView, UIAlertViewController
- PHP对象赋值测试帮助理解
- nw.js node-webkit系列(1)简单介绍及应用
- 通过enter键实现登录操作
- Flume+Kafka整合