携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情
1.引言
-
c++除了有面向对象编程还有泛型编程。
-
本阶段主要针对C++ 泛型编程 和STL技术做详细讲解,探讨C++更深层的使用
-
泛型编程:主要利用模板的技术去做一个实现。
- 模板把函数或类要处理的数据类型参数化,表现为参数的多态性,成为类属。
- 模板用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。
2.模板的概念
- 模板就是建立通用的模具,大大提高复用性
- 通用行很强,但是不能直接使用,
模板的特点:
- 模板不可以直接使用,它只是一个框架
- 模板的通用并不是万能的
3.函数模板
- 建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。 将函数返回值和形参类型更抽象出去。
语法:
template<typename T>
函数声明或定义
解释:
-
template --- 声明创建模板
-
typename --- 表面其后面的符号是一种数据类型,可以用class代替 告诉编译器,它的后面是通用的类型也是个虚拟的类型。
-
T --- 通用的数据类型,名称可以替换,通常为大写字母 声明一个模板,告诉编译器后面代码中紧跟着的T不要报错,T是一个通用的数据类型。
4.代码举例说明
- 取两数之间的最大值
- 两种方式使用函数模板
4.1 自动类型推导
- 因为我们传入的数据是整型,把实参放到了形参中,他就自动推导是整型。
#include<iostream>
#include <fstream>
#include <string>
using namespace std;
void maxint(int &a, int &b)
{
if (b > a) {
a = b;
}
}
void h()
{
int a, b;
a = 1;
b = 2;
maxint(a, b);
cout << "最大值是: " << a << endl;
}
int main() {
h();
system("pause");
return 0;
}
输出:
最大值是: 2 请按任意键继续. . .
- 如果是浮点型
void maxint(double &a, double &b)
{
if (b > a) {
a = b;
}
}
void h()
{
double a, b;
a = 1.2;
b = 1.3;
maxint(a, b);
cout << "最大值是: " << a << endl;
}
输出:
最大值是: 1.3 请按任意键继续. . .