025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

参考内容:

0)北京大学信息科学技术学院《程序设计实习》,郭伟老师&刘家瑛老师

目录

一、模板的基本概念,以排序问题为例

0)函数重载与函数模板

1)函数与模板的匹配顺序

二、类模板

0)类模板引出

1)类模板的定义

2)类模板的概念

3)定义类模板的成员函数

三、泛型程序设计

0)类模板与非类型参数

1)类模板与继承

2)类模板与友函数

四、string类


一、模板的基本概念,以排序问题为例

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

总结来说,对于功能相同,而输入参数类型不同的同名函数,除函数重载外的另一种更简便的方法。

我就简单理解为:函数模板是对重载函数的进一步抽象

先回顾一下函数重载:

0)函数重载与函数模板

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

是不是很酷?

举个例子:输出全部数组元素(函数本身提前不知道数组元素类型,就先记为“T”)

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

编译系统会根据输入参数类型自动的生成相应的模板函数

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

这样还不够,一个模板函数可以有多种类型参数

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

另外

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

注意:与函数重载一样,函数模板也要避免二义性

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

1)函数与模板的匹配顺序

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

二、类模板

当你觉得类已经比较抽象了,too young too simple!类还可以进一步抽象,惊不惊喜意不意外

0)类模板引出

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

1)类模板的定义

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

2)类模板的概念

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

3)定义类模板的成员函数

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

好了,以上都是铺垫啊!本文的重点马上要登场了

三、泛型程序设计

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

现在可以回顾一下,前面说的函数模板和类模板是不是属于泛型函数设计的范畴!

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

使用类模板声明对象的时候要注意:

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

0)类模板与非类型参数

这里又出现了一个新概念:非类型参数,不要慌,前面其实已经出现了,看下面的定义

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

好,我们已经知道类模板可以派生出模板类,其实类模板的继承关系有很多

1)类模板与继承

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

2)类模板与友函数

有四种情况:

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

举例略

3)类模板与static成员

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

025 泛型程序设计(Generic Programming)函数模板 类模板 String类 template

四、string类

为什么吧string类放这里,是因为它是由类模板派生来的模板类!

用的比较多,放到下一篇文章单独说!