模板类,模板函数初识

本文详细介绍了C++中的模板概念,包括函数模板的参数列表、使用方式、原理以及实例化过程,特别关注了隐式实例化和显式实例化的区别。同时探讨了类模板的格式、实例化要求以及模板函数与普通函数的匹配规则。
摘要由CSDN通过智能技术生成

前提:

模板概念:(引用自菜鸟教程)

即:模板是蓝图(类或对象)的蓝图(通过传不同信息(类型)创建不同函数和类),能使编程不受类型限制,让编译器解决,避免了重复工作。

一,函数模板

小概念:

模板函数与函数模板

模板参数列表

1.形式:

template<typename T,......>或者template<class T,......>,

将函数某类型替换为列表中的类型名。

注意:template模板参数列表和函数模板之间是1对1的。

2.使用:

(1)单个类型参数

(iostream的std命名空间中有swap()函数模板,直接用就行)

(2)多个类型参数

(1)返回某个参数类型

(2)返回自动类型(建议,方便隐式类型转换)

3.原理:

编译器帮你匹配函数参数类型,匹配到函数后再将传入类型替换形参与代码块中的。

问题:

1.为什么参数不用auto

答;auto不能用来做参数,但可以做返回值类型。

4.模板的实例化

定义:

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

1.隐式实例化:

实质:让编译器根据实参推演模板参数的实际类型

要传多于模板参数列表类型,就要用显式实例化

2.显式实例化

用法:在函数名后的<>中指定模板参数的实际类型

实质:指定模板参数类型,让编译器帮你转换

只指定一个,编译器会从所有函数模板里找与剩下的参数匹配的函数模板

5.匹配:

1. 一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函数。(一个成品一个半成品,如果指定,可以将半成品变成成品用

-->用显式实例化指定模板了。

--------------

2.当模板函数与普通函数都存在,如果类型匹配,编译器会优先选择普通函数

(匹配的成品会被优先选择

例子1同上图第一个Add选的普通函数。

--------------

3.模板函数之间就看谁能更好匹配形参。(看哪个成品/半成品更好)

总结:

1.显式实例化指定模板函数,再看剩下参数哪个匹配

2.看哪个函数更匹配形参

3.模板函数和普通函数同时匹配选普通函数(效率高)

二,.类模板

1.格式:

template <class C1,.....>

class 类模板名

{ // 类内成员定义 };

2.实例化:

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

声明与定义分离

要求:1.模板函数    必须在前面加上模板参数列表,告诉编译器是哪个模板的东西。

2.模板类成员函数     在模板参数列表基础上  必须前面加模板名<所有模板参数>::

2.不能声明与定义分离在两个文件。->编译器找这麻烦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值