目录

  • 1 基本概念
  • 2 函数模板介绍
  • 3 类模板介绍

1 基本概念

模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。

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

模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。

每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 :

vector <int>
vector <string>

2 函数模板介绍

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。

template <typename T1,typename T2,....>
返回值类型 函数名(参数列表)
{// 函数的主体
}
template<typename T>
void MySwap(T& a, T& b)
{T tmp = a;a = b;b = tmp;
}

函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器。在编译器编译阶段,对于模板函数的使用,编译器需要根据传入的实参类型来推演生成对应类型的函数以供调用。

用不同类型的参数使用函数模板时,称为函数模板的实例化。模板参数实例化分为:隐式实例化和显式实例化。隐式实例化不必多说,就是上文提到的编译器进行实参类型推演出对应函数。

下面介绍显示实例化,即在函数名后的<>中指定模板参数的实际类型。

template<typename T>
T myAdd(T a, T b)
{return a + b;
}
int main()
{myAdd(1, 3);//隐式myAdd<double>(1.3, 4.3);//显示return 0;
}

如果类型不匹配,编译器会尝试进行隐式类型转换,如果无法转换成功编译器将会报错。注意:模板函数不允许自动类型转换,但普通函数可以进行自动类型转换

3 类模板介绍

template<class T1, class T2, ..., class Tn>class 类模板名
{// 类内成员定义
};
template<class T>
class MyVerter
{public:MyVerter(size_t size = 0,size_t capacity = 10):_pData(new T[capacity]),_size(0),_capacity(capacity){}~MyVerter<T>(){if (_pData)delete[] _pData;_size = _capacity = 0;}size_t Size() {  return _size; }
private:T* _pData;size_t _size;size_t _capacity;
};

类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。

int main()
{MyVerter<int> v1;MyVerter<char> v2;return 0;
}

【c++师傅领进门,修行靠个人】第七篇:C++模板相关推荐

  1. [PMP]师傅领进门,修行在个人-致领才PMP学习之旅

    师傅领进门,修行在个人-致领才PMP学习之旅 第一部分 报考"缘"由 选择机构 第二部分 第三部分 第一部分 关键词:机缘巧合 为何要学习PMP (1)随着年龄增长,从技术性人才转 ...

  2. 254work 9月总结复盘:师傅领进门 修行在个人

    圣言:天无绝人之路,毕竟上天没有绝您的事业发展之路啊. 俗人陈六子:然后呢? 不用任何人讲,也知道. 自强不息效法行,力行力行再力行,唯有力行解千愁. 虽然说没有绝您的事业发展路,但这基本上也是您这辈 ...

  3. 体会-师傅领进门修行在个人

    之前发过一排难简单的处理exe病毒的方式.今天徒弟(我的Blog上有她的链接)告诉我她一不小心中了病毒:VIKING.弄了一天多,没用.包括什么专杀工具,全部都不行. 于是又用了以前那招,用Ultra ...

  4. 外汇投资中师傅领进门 修行在个人

    很多人在并未真正接触到外汇投资的时候心里觉着炒外汇的学习不过是多熟悉了解基本面情况,找些相关的书看一看,或者再找个老师亲身指导一番.打个比方,就如同金庸<天龙八部>中的王语嫣,天下武功尽皆 ...

  5. 数字IC笔面基础,师傅领进门,修行靠个人——人人心中都有一个状态机(状态机简介及Verilog模板)

    师傅领进门,修行靠个人(状态机) 写在前面的话 状态机简介 状态机类型 一段.两端还是三段? 状态机的Coding Style要求: 几点规则: 什么是一段.两段.三段? 一段.两段.三段优缺点 Ve ...

  6. 【c++师傅领进门,修行靠个人】第三篇:类和对象

    教你如何new一个对象 1 别急,先来了解你的对象 2 类之初体验 2.1 类的访问限定符 2.2 认识封装 2.3 类的作用域 3 来了,请创建你的对象 4.类对象模型 5 this指针 什么?你告 ...

  7. 【c++师傅领进门,修行靠个人】第一篇:认识c++

    阅读本文你将学到: 1.什么是c++ 2.c++的发展史 3.c++的重要性 4.如何学习c++ 1.什么是c++ C语言是结构化和模块化的语言,适合处理较小规模的程序.对于复杂的问题,规模较大的程序 ...

  8. 【c++师傅领进门,修行靠个人】第六篇:内存管理

    本文目录 1 内存分布图 2 C语言和C++内存分配实现 2.1 C语言实现 2.2 C++实现 3 C语言和C++内存管理区别 4 内存泄漏 1 内存分布图 注意: 1.向下生长:地址由高到低 2. ...

  9. 【c++师傅领进门,修行靠个人】第五篇:C++类和对象中的一些小细节

    面向对象的总结 1 初始化列表 2 如何突破封装 3 了解静态成员 4 类也能套娃 5 面向对象总结 1 初始化列表 初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成 ...

最新文章

  1. 面试官本拿求素数搞我,但被我优雅的“回击“了(素数筛)
  2. python中序列和列表区别细菌真菌病毒_python是哪种动物_动物的分类
  3. 【转】让itunes下载加速的真正办法,转向至香港台湾澳门苹果服务器 -- 不错不错!!!...
  4. crontab/ntpdate——时间同步
  5. MapReduce-Reduce端join操作-Map阶段代码
  6. java http请求实现_java工程实现http请求接口
  7. shell mysql awk_shell mysql 处理数据小结
  8. linux下查看mysql版本的四种方法
  9. 行为型模式——状态模式(十一)
  10. rabbitMQ第四篇:远程调用
  11. ubuntu16.04利用SVN下载文件
  12. python cpk 计算
  13. winform控件之notifyicon
  14. \itshape和\textit的区别or用法
  15. 皮皮虾技术三面,我的面试经验与总结分享
  16. 计算机教室怎么通电,多媒体电教室系统
  17. (二) DIM-SUM系统环境搭建之编译与调试环境
  18. 典型相关分析及R应用
  19. python气象处理与绘图_Python气象数据处理与绘图(18):泰勒图
  20. 工作流程管理系统,表结构与运行机制

热门文章

  1. 1195:国庆节的礼物
  2. node 多版本管理(mac)
  3. OpenStack镜像制作教程
  4. 解决jupyter不自动跳转到浏览器问题
  5. 常用开发语言及相应框架
  6. 清理win7系统闲置服务器,教你还原win7系统WICleanup清理Windows Installer冗余文件的方案...
  7. JavaAwt子部件定位设置大小,要去掉容器的Layout,Frame默认自带BorderLayout布局,去掉布局用setLayout(null);
  8. YMFC小四轴 众筹已成功 需要的朋友可联系我
  9. 用代码实现一个简单计算器
  10. 启动SpringBoot时报错