C++打怪升级(八) |
您所在的位置:网站首页 › 类模板函数调用时机 › C++打怪升级(八) |
前言 模板,代码变得简洁!本节将介绍泛型编程中模板的用法。 泛型编程引子对于一组功能相同单参数类型不同的函数,在C语言中只能写多个不同名的函数来实现; void Swapc(char& a, char& b) { char tmp = a; a = b; b = tmp; } void Swapi(int& a, int& b) { int tmp = a; a = b; b = tmp; } void Swapf(float& a, float& b) { float tmp = a; a = b; b = tmp; }在C++中我们学习了函数重载,可以写多个同名参数类型不同的函数来实现; C++函数重载解决了函数同名的问题,但是我们还是要写多个函数,而它们仅仅只有类型不同; void Swap(char& a, char& b) { char tmp = a; a = b; b = tmp; } void Swap(int& a, int& b) { int tmp = a; a = b; b = tmp; } void Swap(float& a, float& b) { float tmp = a; a = b; b = tmp; }这种方法缺点明显: 需要根据参数类型来手动增加接受该类型的函数,这对于我们来说很麻烦; 这一组函数代码的可维护性差,要改就需要更改一组函数,也很麻烦; 基于类似这样的原因,C++提出了泛型编程的概念,我们只需要写出一个函数模板而不是具体的函数,我们直接使用这个函数模板,具体的函数由编译器自动生成; 泛型编程是啥编写与类型无关的通用代码,是代码复用的方法之一。 模板是泛型编程中的基本组成部分,分为函数模板和类模板。 函数模板概念函数模板代表了一个函数家族,与具体类型无关,在使用时被参数化,编译器会根据实参类型产生函数的特定类型版本 格式C++模板引入了新关键字template表示模板; 对于函数模板参数类型并不是具体的类型,而是class/typename来表示通用类型; typename也是一个C++关键字; template 返回值类型 模板函数名(函数参数列表){ //模板函数体 }例子 交换函数模板 //函数模板 template void Swap(T& t1, T& t2) { T tmp = t1; t1 = t2; t2 = tmp; }或 //函数模板 template void Swap(T& t1, T& t2) { T tmp = t1; t1 = t2; t2 = tmp; }int main() { int a = 1, b = 2; cout |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |