C++模板技术实现 泛型编程,通俗易懂的泛型编程教程//。

目录

一:泛型编程

1.1:泛型编程的引出

1.2:函数模板的简单使用

二:模板技术的基本格式

(1)类模板

​编辑

(2)函数模板

三:函数模板的使用

3.1:自动推导类型

3.2:显示指定类型

3.3:模板函数局限

四:类模板的使用


一:泛型编程

1.1:泛型编程的引出

我们直接通过两段代码来看一下,为什么会出现泛型编程:

C++模板技术实现 泛型编程,通俗易懂的泛型编程教程//。_第1张图片

 对于这两个函数来说,他们函数体实现的功能是完全相同的(交换两个参数的值),唯一的区别就在于他们的参数类型不同相同功能的代码因为参数类型的不同而被重复开发,这样就造成代码的冗余。

所以为了应对这样的情况,就出现了一种模板技术。

1.2:函数模板的简单使用

如果我们使用函数模板去实现这个功能,就不会出现因为参数类型原因,同类型代码重复开发的情况。

C++模板技术实现 泛型编程,通俗易懂的泛型编程教程//。_第2张图片

 可以看到。我们使用同一个函数模板去操作交换两种不同类型的数据时,是完全可以实现的,这样就很好的避免的相同功能代码被重复开的的情况。

二:模板技术的基本格式

模板编程分为两类:

(1)类模板

C++模板技术实现 泛型编程,通俗易懂的泛型编程教程//。_第3张图片

 紧跟在template下面的是类,那么就被称为类模板 

(2)函数模板

C++模板技术实现 泛型编程,通俗易懂的泛型编程教程//。_第4张图片

  紧跟在template下面的是函数,那么就被称为函数模板 。

这里注意:  typename与class的作用是完全相同的。当然一个模板其实不只能有一个泛型,如果需要,还可以在<>中用逗号拼接符继续拼接。

三:函数模板的使用

3.1:自动推导类型

C++模板技术实现 泛型编程,通俗易懂的泛型编程教程//。_第5张图片

在使用函数模板时,像调用普通函数那样直接调用,不显示指定类型,编译器会自动根据参数的类型进行推导,从而确定泛型的类型。 

3.2:显示指定类型

C++模板技术实现 泛型编程,通俗易懂的泛型编程教程//。_第6张图片

在使用函数模板时,我们也可以指定泛型的类型,然后再传入参数,当然参数的类型需要和指定的类型一致。当我们指定的泛型的类型时,编译器就不会进行自动类型推导了。 

3.3:模板函数局限

C++模板技术实现 泛型编程,通俗易懂的泛型编程教程//。_第7张图片

我们在使用普通函数交换int类型数据和char类型数据时,形参使用两个int类型数据接收是不会出问题的,因为编译器是会对char类型进行整形提升的(主要还是因为char也是属于整形家族的)。但是对于模板函数来说,是不能进行类型转换的。

当模板函数与普通函数发生重载时,如果参数匹配的话系统是会默认优先调用普通函数的,(因为不需要进行推导)。但如果我们指定要调用模板函数,那么在调用时,在函数名后加一个<>就可以了。

C++模板技术实现 泛型编程,通俗易懂的泛型编程教程//。_第8张图片

 

四:类模板的使用

C++模板技术实现 泛型编程,通俗易懂的泛型编程教程//。_第9张图片

在使用类模板实例化对象时,必须显示指定类型,不然无法实例化对象。

因为在实例化对象时,需要给对象分配空间,如果不指定类型,编译器不知道该分配多大的

空间给对象。 

当然我在上面的教程中,使用的类型都是基本的类型便于理解,我们也可指定自定义的类型。

你可能感兴趣的:(C++,c++)