C++中的模板与泛型编程学习

来源:互联网 发布:淘宝私密发货 编辑:程序博客网 时间:2024/05/10 22:28

1.模板与泛型编程

C++中的模板包括函数模板和类模板两种。在编程中,我们使用模板,就可以独立于任何特定类型的方式来编写代码,例如标准模板库中的vector容器,就是一个模板类,通过vector<int>,vector<String>等,就可以用vector来包含任何类型的数据。使用类模板或函数模板的编程,我们成为是泛型编程,或模板编程。

 

2.函数模板的定义和使用

1)函数模板的定义

template <typename T> int compare(T v1, T v2) {                                                                                                  if (v1 < v2) return -1;    if (v2 < v1) return 1;    return 0;}

备注:

Atemplatec++中定义模板的关键字,<typename T, class U>成为模板的模板形参表,其中typenameclass等价的。

2)模板函数的使用

compare(1, 2);compare(1.5,3.8);compare("hello","world");

备注:

A)在使用模板函数时,编译器会根据传入函数的实参类型,来对应的模板形参的实际类型。因此使用模板函数时,不需要显示执行模板形参表的实际类型。

 

3.类模板的定义和使用

1)类模板的定义

template <class Type> class Queue {public:    Queue();    Type & front();    void push(const Type &);    void pop();private:    //…}

备注:

Atemplate <class Type>为定义类模板或函数模板的八股文

2)类模板的使用

Queue<int> qi;Queue<String> qs;

备注:

A)在使用类模板时,需要显示指定类模板的类型。例如,Queue<int>其中使用整型来执行模板形参的实际类型。

 

4.几个其他的问题

1)无论是类模板还是函数模板,都是一个蓝图,本身不是一个类或函数,编译器用模板产生指定的类或函数的特定类型版本。产生模板的特定类型实例的过程称为模板的实例化

2)有继承语言特性带来的多态性,是程序运行时体现出来的,称为运行时多态性。泛型编程的多态性,是在编译阶段体现的,称为编译时多态性。

(3)Java中也有泛型编程,是从C++中借鉴过去的,是类似的。

0 0
原创粉丝点击