模板-函数模板
发布日期:2021-11-20 10:17:52 浏览次数:13 分类:技术文章

本文共 1971 字,大约阅读时间需要 6 分钟。

/*

本阶段主要是C++泛型编程(思想:利用模板技术实现)和STL技术,
1.模板
模板就是建立通用技术,大大提高复用性,比如:一寸照片
模板的特点:1.模板不可以直接使用,他只是一个框架2.模板的通用并不是万能的
C++提供两种模板机制:1.函数模板2.类模板
函数模板:
作用:建立一个通用的函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。
语法
template
函数声明或定义

解释:

template:声明创建模板
typename:表面其后面的符号是一种数据类型,可以用class代替

T:通用的数据类型,名称可以替换,通常为大写字母

*/

//函数模板//交换两个整型的函数void swapint(int&a, int&b) {
int temp = a; a = b; b = temp;}//交换浮点型的函数void swapdouble(double&a, double&b) {
double temp = a; a = b; b = temp;}//函数模板template
//声明一个模板,告诉编译器后面代码中紧跟着的T不要报错,T是一个通用模板的数据类型void myswap(T &a, T &b) {
T temp = a; a = b; b = temp;}void test01() {
int a = 10; int b = 20; //swapint(a, b); //利用函数模板交换 //两种方式:1. //1.自动类型推导, myswap(a, b); cout << "a" << a << endl; //2.显示指定类型 myswap
(a, b); double c = 1.2; double d = 1.1; swapdouble(c, d);}int main(){
test01();}

2.注意事项:

/*

注意事项:

1.自动类型推导,必须推导出一致的数据类型T,才可以使用
**2.模板必须要确定出T的数据类型,才可以使用(一般用这种)
/

#include "pch.h"#include 
#include
using namespace std;//template
//typename可以替换成classtemplate
void myswap(T &a,T &b) {
T temp = a; a = b; b = temp;}void test01() {
int a = 10; int b = 20; char c = 'c'; myswap(a, b); //myswap(a, c);//报错,因为不是同一个数据类型}template
void func() {
cout << "调用" << endl;}void func2() {
func
();//模板必须要确定出T的数据类型,才可以使用.}//模板案例/*实现通用,对数组进行排序的函数规则:从大到小算法:选择测试: char 数组、int 数组*///交换函数模板template
void myswap(T &a,T&b) { T tempt = a; a = b; b = tempt;}//排序算法template
void mysort(T arr[],int len) { for (int i = 0; i < len; i++) { int max = i;//认定最大值的下标 for (int j = i + 1; j < len; j++) { if (arr[max] < arr[j]) { max = j;//更新最大值坐标 } } if (max != i) { myswap(arr[max], arr[i]);//交换max和i元素 } }}

3.普通模板和函数模板调用规则以及区别

普通函数和函数模板的区别

1.普通函数调用时可以发生自动类型转换(隐式类型转换)
2.函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换

3.如果利用显示指定类型的方式,可以发生隐式类型转换

调用规则

1.如果函数模板和普通函数都可以实现,优先调用普通函数

2.可以通过空模板参数列表来强制调用函数模板
3.函数模板也可以发生重载
4.如果函数模板可以产生更好的匹配,优先调用函数模板

转载地址:https://blog.csdn.net/weixin_43223362/article/details/103057952 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:模板-类模板
下一篇:多态-虚析构和纯虚析构

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月17日 21时23分42秒