C++打怪升级(八)

您所在的位置:网站首页 类模板函数调用时机 C++打怪升级(八)

C++打怪升级(八)

2023-04-30 07:29| 来源: 网络整理| 查看: 265

前言

模板,代码变得简洁!本节将介绍泛型编程中模板的用法。

泛型编程引子

对于一组功能相同单参数类型不同的函数,在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