模板-函数模板
发布日期: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秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
A* Pathfinding Project (Unity A*寻路插件) 使用教程
2019-04-27
bash学习笔记
2019-04-27
sqlite学习
2019-04-27
手把手教你实现Unity与Android的交互
2019-04-27
手把手教你使用Unity的Behavior Designer
2019-04-27
Unity3D摄像机裁剪——NGUI篇
2019-04-27
lua深拷贝一个table
2019-04-27
app运行提示Unable to Initialize Unity Engine
2019-04-27
spring boot 与 Ant Design of Vue 实现修改按钮(十七)
2019-04-27
spring boot 与 Ant Design of Vue 实现删除按钮(十八)
2019-04-27
spring boot 与 Ant Design of Vue 实现新增角色(二十)
2019-04-27
spring boot 与 Ant Design of Vue 实现修改角色(二十一)
2019-04-27
spring boot 与 Ant Design of Vue 实现删除角色(补二十一)
2019-04-27
spring boot 与 Ant Design of Vue 实现左侧组织树(二十三)
2019-04-27
spring boot 与 Ant Design of Vue 实现新增组织(二十四)
2019-04-27
spring boot 与 Ant Design of Vue 实现修改组织(二十五)
2019-04-27
spring boot 与 Ant Design of Vue 实现删除组织(二十六)
2019-04-27