C++ 之函数模板
2022/8/28 14:23:17
本文主要是介绍C++ 之函数模板,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
C++ 之函数模板
函数的参数类型不确定,这样就可以使用泛型。
// 类型参数化 C++中称之为泛型编程--模板技术 template <class T > // 告诉编译器,下面如果出现T不要报错,T是一个通用类型 这里将class替换成typename是一样的
void mySwap(T &a, T &b) { T tmp = a; a = b; b = tmp; }
自动类型推导,函数必须有参数才可以推导
// 2.显示调用 mySwap<int>(a, b); // 这里指定T是int类型 cout << "a=" << a << "," << "b=" << b << endl; // 模板必须可以推导出T才可以使用 ,要么直接显示指定T
template < typename T>
void mySwap1() {
}
mySwap1 < double >(); // 如果不能根据参数列表推出来,就得显示指定类型
mySwap(a,b) // 根据a,b的类型自动推导T的类型。 mySwap<int> // (a,b)直接指定T的类型是int
2 使用函数模板实现通用数组排序
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; // 使用通用类型 对int char类型的数组进行排序 // 排序的规则 降序 使用选择排序 // 选择排序 每1趟中从待排序中选择一个最小的放在已排序的右端 template<class T> void mySort(T arr[],int len) { for (int i = 0; i < len-1;i++) { int max = i; for (int j = i + 1; j < len;j++) { if (arr[max] < arr[j]) { // 交换下标 max = j; } } if (max != i) { // 交换数据 swap(arr[max],arr[i]); } } } //输出数组元素的模板 template<class T> void printArray(T arr[],int len) { for (int i = 0; i < len;i++) { cout << arr[i] << "\t"; } } void test01() { char arr[] = "chengluofei"; //int len = sizeof(arr) / sizeof(char); mySort(arr,strlen(arr)); printArray(arr, strlen(arr)); } int main() { test01(); system("pause"); return EXIT_SUCCESS; }
3 普通函数与函数模板的区别以及调用规则
#define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; //1. 普通函数与函数模板的区别 template<class T> T myPlus(T a,T b) { return a + b; } int myPlus2(int a , int b) { return a + b; } void test01() { int a = 10; int b = 20; cout << myPlus(a, b) << endl; cout << myPlus2(a, b) << endl; int c = 'c'; //cout << myPlus(a, c) << endl; // 类型推导出错 // char类型自动转int 类型 1. 普通的函数可以隐式类型转换 函数模板不可以进行隐式类型转换 cout << myPlus2(a, c) << endl; } // 2. 普通函数和函数模板的调用规则 template<class T> void myPrint(T a, T b) { cout << "模板调用的myPrint" << endl; } template<class T> void myPrint(T a, T b,T c) { cout << "模板调用的myPrint(a,b,c)" << endl; } void myPrint(int a, int b) { cout << "函数调用的myPrint" << endl; } void test02() { int a = 10; int b = 20; // 1.如果出现重载(普通函数和函数模板函数名与参数个数相同),优先调用普通的函数 如果没有实现普通函数 会出错 //myPrint(10,20); // 2.如果想强制调用函数模板 可以使用空菱形列表 myPrint<>(10,20); // 3.函数模板可以发生重载 myPrint<>(10, 20,30); // 4. 如果函数模板可以优先产生更好的匹配,那么优先调用函数模板 char c = 'c', d = 'd'; myPrint(c,d); } int main() { test01(); test02(); system("pause"); return EXIT_SUCCESS; }
这篇关于C++ 之函数模板的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享
- 2024-11-22ansible 的archive 参数是什么意思?-icode9专业技术文章分享
- 2024-11-22ansible 中怎么只用archive 排除某个目录?-icode9专业技术文章分享
- 2024-11-22exclude_path参数是什么作用?-icode9专业技术文章分享
- 2024-11-22微信开放平台第三方平台什么时候调用数据预拉取和数据周期性更新接口?-icode9专业技术文章分享
- 2024-11-22uniapp 实现聊天消息会话的列表功能怎么实现?-icode9专业技术文章分享
- 2024-11-22在Mac系统上将图片中的文字提取出来有哪些方法?-icode9专业技术文章分享
- 2024-11-22excel 表格中怎么固定一行显示不滚动?-icode9专业技术文章分享
- 2024-11-22怎么将 -rwxr-xr-x 修改为 drwxr-xr-x?-icode9专业技术文章分享
- 2024-11-22在Excel中怎么将小数向上取整到最接近的整数?-icode9专业技术文章分享