泛型编程
众所周知,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 }
通过这个例子我们了解的泛型编程。显然,使用泛型编程(模板)极大地增加了代码的重用性。