泛型编程

  众所周知,C++,具有面向对象的编程能力。然而C++不仅是一个面向对象程序语言,它还使用与泛型编程(Generic Programming)。这项技术可以写出高效率并可重复运用的软件组件。

  泛型编程是一种新的编程思想,它基于模板技术,有效地将算法与数据结构分离,降低了模块间的耦合度。

  泛型编程关注与产生通用的软件组件,让这些组件在不同的应用场合都能很容易的重用。在C++中,类模板和函数模板是进行泛型编程极为有效的机制。有了这两大利器,实现泛型化并不需要付出效率的代价。

  下面举例说明什么事泛型编程。

  泛型编程指编写完全一般化并可重复使用的算法,其效率与针对某特定的数据类型而设计的算法相同。所谓泛型,是指具有在多种数据类型上皆可操作的含意,在C++中实际上就是使用模板实现。

  

 1 int max(int a,int b)
 2 {
 3     return a>b?a:b;
 4 }
 5 
 6 
 7 float max(float a,float b)
 8 {
 9     return a>b?a:b;
10 }
11 
12 
13 double max(double a,doubleb)
14 {
15     return a>b?a:b;
16 }

  可以看出,上面写了3个重载函数,它们的区别仅仅在于类型(参数及返回值)不同,而函数体完全一样。

  而使用模板时,程序代码如下所示:

1 template <class T>   //class也可用typename替换
2 T max(T a,T b)
3 {
4     return a>b?a:b;
5 }

  这里的class不代表对象的类,而是类型(可以用typename替换)。这样max函数的各个参数以及返回值类型都是T,对于任意类型的两个数,都可以调用max函数求大小,测试代码如下:

1 int main()
2 {
3     cout<<max(1,2)<<endl;    //隐式调用int类型的max
4     cout<<max(1.1f,2.2f)<<endl;    //隐式调用float类型的max
5     cout<<max(1.11l,2.22l)<<endl;    //隐式调用double类型的max
6     cout<<max('A','C')<<endl;      //隐式调用char类型的max
7     cout<<max<int>(1,2.0)<<endl;   // 必须指定int类型
8     return 0;
9 }    

  通过这个例子我们了解的泛型编程。显然,使用泛型编程(模板)极大地增加了代码的重用性。

  

原文地址:https://www.cnblogs.com/galuo/p/3046702.html