一、交换变量的方法
1、定义宏代码块
(1)、优点:代码复用,适合所有的类型
(2)、缺点:编译器不知道宏在哪,缺少类型检查
2、定义函数
(1)、优点:真正的函数调用,编译器对类型进行检查
(2)、缺点:根据类型重复定义函数,无法代码复用
#includeusing namespace std;#define SWAP(t, a, b) \do \{ \ t c = a; \ a = b; \ b = c; \}while(0) void swap(int& a, int& b){ int i = a; a = b; b = i;}/*void swap(double& a, double& b){ int i = a; a = b; b = i;}*/int main(){ int a = 1; int b = 2; swap(a, b); cout << "swap(a, b):" << a << "," << b << endl;// 输2,1 SWAP(int, a, b); cout << "SWAP(int, a, b):" << a << "," << b << endl;//输出1, 2 return 0;}
二、泛型编程与函数模板
1、泛型编程的概念:不考虑具体类型的编程方式
2、c++中的泛型编程:函数模板
(1)、一种特殊的函数可用不同的类型来调用
(2)、看起来和普通函数很类似,区别是类型可被参数化
3、函数模板的语法规则
(1)、template关键字用于声明开始进行泛型编程
(2)、typename关键字用于声明泛指类型
4、函数模板的使用
(1)、自动推导调用
(2)、具体类型显示调用
#include#include using namespace std;template < typename T >void Swap(T& a, T& b){ T c = a; a = b; b = c;}template < typename T >void Sort(T a[], int len){ for(int i=0; i a[j] ) { Swap(a[i], a[j]); } } }}template < typename T >void Println(T a[], int len){ for(int i=0; i
三、小结
(1)、函数模板是泛型编程在c++中的应用方法之一(还有类模板等)
(2)、函数模板能够根据实参对参数类型进行推导
(3)、函数模板支持显示地指定参数类型
(4)、函数模板是c++中重要的代码复用方式