文章目录
1.泛型编程
-
面向过程PO(procedure oriented) 、 面向对象OO(object oriented) 、 泛型编程GP(generic programming) 是三种重用的编程方法。
-
早期的C++语言泛型编程思想仅仅体现于简单的模板技术, 之后的标准模板库STL(standard template library) 是泛型编程思想的实际体现和具体实现。
-
面向过程是通过将代码段封装在一个函数中, 通过函数调用来实现目标代码的重用。
-
面向对象是通过类的继承来实现对象目标代码的重用。
-
如果需要编写一个可用于不同数据类型的算法, 可以采用的方法有:
①面向过程的方法: 对源代码进行复制和修改, 生成不同数据类型版本的算法函数, 调用时需要对数据类型进行人工的判断;
②面向对象的方法: 在一个类中, 编写多个同名函数, 它们的算法一致, 但是所处理数据的类型不同, 当然函数的参数类型也不同,通过函数重载来自动调用(系统自动调用)对应数据类型版本的函数。
显然, 以上两种方法都需编写多个相同算法的不同函数, 不能做到代码真正的重用。 它们二者之间的主要差别, 只是调用方便与否。
如果采用泛型编程, 就可以实现源代码级的重用。 -
泛型算法的定义
泛型(generic) 是一种允许一个数据取不同类型的技术, 与操作对象数据类型独立的算法称为泛型算法, 独立于任何特定类型的编程方法称为泛型编程。 -
模板是泛型编程的基础。
泛型编程关注于产生通用的软件组件, 让这些组件在不同的应用场合都能很容易地重用。
在C++中, 类模板和函数模板是进行泛型编程极为有效的机制 -
类模板的应用eg
#include <iostream>
using namespace std;
template <class T> //声明一个模板, 虚拟类型名为T
class Compare //类模板名为Compare
{
public :
Compare(T a,T b){x=a;y=b;}
T max(){return (x>y)?x:y;}
T min(){return (x<y)?x:y;}
private :
T x,y;
};
int main()
{
Compare<int> a(4,7);//int对应T
cout<<"a: max="<<a.max()<<",min="<<a.min()<<endl;
return 0;
}