首页 > 编程语言 >C++模版

C++模版

时间:2024-10-10 09:22:53浏览次数:8  
标签:函数 模版 C++ 实例 参数 类型 模板

函数模版

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

函数模版的格式如下

以swap函数模版实例化为例:

注意:typename 是定义函数模版的关键字,可以用 class 替代。(但是不能用  struct   替代  class

函数模版的原理

函数模板是一个蓝图(就像是按照图纸建设不同的房子,而模版就是这个图纸),它本身并不是函数是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就是将本来应该我们做的重复的事情交给了编译器。 其原理就像下图:

函数模版的实例化

用不同类型的参数使用函数模板时,称为函数模板的实例化。模板参数实例化分为:隐式实例化显式实例化。

显示实例化:在函数名后的 < > 中指定模板参数的实际类型

隐式实例化:让编译器根据实参推演模板参数的实际类型。

模版参数的匹配原则

1. 一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函数。 

2. 对于非模板函数和同名函数模板如果其他条件都相同,在调动时会优先调用非模板函数而不会从该模板产生出一个实例如果模板可以产生一个具有更好匹配的函数, 那么将选择模板。


 

3. 模板函数不允许自动类型转换,但普通函数可以进行自动类型转换。
 

类模板

类模版定义格式:

注:当类模板中的函数在类外定义是要加模版参数列表

类模版的实例化

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

标签:函数,模版,C++,实例,参数,类型,模板
From: https://blog.csdn.net/2301_79224381/article/details/142810038

相关文章

  • 现代C++编程初体验
    实验任务1:task1.cpp1#include<iostream>2#include<string>3#include<vector>4#include<algorithm>56usingnamespacestd;78//声明9//模板函数声明10template<typenameT>11voidoutput(constT&c);1213/......
  • 小写转换大写DEV C++
    char是计算机编程语言中可容纳单个字符的一种基本数据类型,说明数据类型是字符型,ch是变量名,变量的名字是可以随便定义的,只要符合命名规则,只不过我们经常用ch来定义一个char型的变量,以便一看就知道这是一个char型的变量%c用来输出一个字符。“%c”是格式说明符,它告诉函数按照......
  • c++单链表(带头结点)
    #include<iostream>usingnamespacestd;//定义typedefstruct_LinkNode{  intdata;//结点的数据域  struct_LinkNode*next;//结点的指针域}LinkNode,Linklist;//初始化boolInitList(Linklist*&L){  L=newLinkNode;  if(!L)returnfalse; ......
  • 【题目解析】蓝桥杯23国赛C++中高级组 - 斗鱼养殖场
    【题目解析】蓝桥杯23国赛C++中高级组-斗鱼养殖场题目链接跳转:点击跳转前置知识:了解过基本的动态规划。熟练掌握二进制的位运算。题解思路这是一道典型的状压动态规划问题。设\(dp_{i,j}\)表示遍历到第\(i\)行的时候,当前行以\(j_{(base2)}\)的形式排列乌龟可以构......
  • codeforces round 974(div.3)E(优先队列实现dijstra算法,devc++的优先队列用greater报
    解题历程:看到两边同时移动,计算最终的相遇时间,我就想到两边同时计算各点到起点的最短距离,就是使用dijstra算法,最后所有节点取两次计算的最大值,再对所有节点取最小值,就是最终答案了,可是这个思路没有考虑有马的情况,思考一番后发现可以多列一个数组记录有马的情况下的行走最短路,然后......
  • C++类
    C++类类//public成员提供类的接口,暴漏给外界,供外界使用//private:提供各种实现类功能的细节方法,但不暴漏给使用者,外界无法使用//注意:struct是成员默认为public的class、class成员默认是privateclassstudent{public:intnumber;charname[100];};c......
  • 实验一 现代C++基础编程
    1.实验任务1task1.cpp1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//3.函数模板、const引用作为形参56#include<iostream>7#include<string>8#include<vector>9#include<algorithm>......
  • 实验1 现代C++编程初体验
    实验任务1:task1.cpp:1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参67#include<iostream>8#include<string>......
  • 实验1 现代C++编程初体验
    任务1 task1.cpp1//现代C++标准库、算法库体验2//本例用到以下内容:3//1.字符串string,动态数组容器类vector、迭代器4//2.算法库:反转元素次序、旋转元素5//3.函数模板、const引用作为形参67#include<iostream>8#include<string>......
  • 实验1 现代C++基础编程
    任务1:源代码task1.cpp1#include<iostream>2#include<string>3#include<vector>4#include<algorithm>56usingnamespacestd;78//声明9//模板函数声明10template<typenameT>11voidoutput(constT&c);1213......