模板是c++中泛型编程的基础。一个模板就是一个创建类或者函数的蓝图或者说公式。当使用vector这样的泛型类型或者find这样的泛型函数时,我们提供足够的信息,将蓝天转化为特定的类或函数。这种转换发生在编译时。 定义模板 -》下面这两个函数几乎是相同的,唯一的差异是参数的类型,函数体完全一样 -》函 ...
分类:
编程语言 时间:
2016-06-26 01:50:13
阅读次数:
261
模板与泛型编程
--模板定义
引言:
所谓泛型程序就是以独立于任何特定类型的方式编写代码。使用泛型程序时,我们需要提供具体程序实例所操作的类型或值。
模板是泛型编程的基础。使用模板时可以无须了解模板的定义。
泛型编程与面向对象编程一样,都依赖于某种形式的多态性。面向对象编程中的多态性在运行时应用于存在继承关系的类。我们能够编写使用这些类的代码,忽略基类...
分类:
编程语言 时间:
2016-05-12 22:07:47
阅读次数:
228
模板与泛型编程
--类模板成员[续2]
六、完整的Queue类
Queue的完整定义:
template class Queue;
template
ostream &operator &);
template class QueueItem
{
friend class Queue;
friend ostream &
operat...
分类:
编程语言 时间:
2016-05-12 22:02:59
阅读次数:
193
模板与泛型编程
--实例化[续]
二、函数模板的显式实参
在某些情况下,不可能推断模板实参的类型。当函数的返回类型必须与形参表中所用的所有类型都不同时,最常出现这一问题。在这种情况下,有必要覆盖模板实参推断机制,并显式指定为模板形参所用的类型或值。
1、指定显式模板实参
如果函数形参类型不统一,该如何指定sum的返回类型?
t...
分类:
编程语言 时间:
2016-05-12 22:02:42
阅读次数:
210
模板与泛型编程
--一个泛型句柄类
引言:
【小心地雷】
这个例子体现了C++相当复杂的语言应用,理解它需要很好地理解继承和模板。在熟悉了这些特性之后再研究这个例子也许会帮助。另一方面,这个例子还能很好地测试你对这些特性的理解程度。
前面示例的Sales_item和Query两个类的使用计数的实现是相同的。这类问题非常适合于泛型编程:可...
分类:
编程语言 时间:
2016-05-12 22:01:13
阅读次数:
256
模板与泛型编程
--类模板成员[续1]
二、非类型形参的模板实参
template
class Screen
{
public:
Screen():screen(hi * wid,'#'),
cursor(hi * wid),height(hi),width(wid) {}
//..
private:
std::string sc...
分类:
编程语言 时间:
2016-05-12 22:01:03
阅读次数:
224
模板与泛型编程
--模板编译模型
引言:
当编译器看到模板定义的时候,它不立即产生代码。只有在用到模板时,如果调用了函数模板或定义了模板的对象的时候,编译器才产生特定类型的模板实例。
一般而言,当调用函数时[不是模板],编译器只需看到函数的声明。类似的,定义类类型的对象时,类定义必须可用,但成员函数的定义不是必须存在的。因此,应该将类定义和函数声明放在头文件中,而普通函数和...
分类:
编程语言 时间:
2016-05-12 22:00:51
阅读次数:
185
模板与泛型编程
--模板定义[续]
四、模板类型形参
类型形参由关键字class或 typename后接说明符构成。在模板形参表中,这两个关键字具有相同的含义,都指出后面所接的名字表示一个类型。
模板类型形参可作为类型说明符在模板中的任何地方,与内置类型说明符或类类型说明符的使用方式完全相同。具体而言,它可以用于指定返回类型或函数形参类型,以及在函数体中用于变量声明或强制类...
分类:
编程语言 时间:
2016-05-12 21:58:10
阅读次数:
229
模板与泛型编程
--类模板成员
引言:
这一节我们介绍怎样实现前面提到的Queue模板类。
标准库将queue实现为其他容器之上的适配器。为了强调在使用低级数据结构中设计的编程要点,我们将Queue实现为链表。实际上,在我们的实现中使用标准库可能是个更好的决定!!-_-。
1、Queue的实现策略
如图所示,我们实现两个类:
1)Queue...
分类:
编程语言 时间:
2016-05-12 21:58:03
阅读次数:
285
模板与泛型编程
--实例化
引言:
模板是一个蓝图,它本身不是类或函数。编译器使用模板产生指定的类或函数的特定版本。产生模板的特定类型实例的过程称为实例化。
模板在使用时将进行实例化,类模板在引用实际模板类型时实例化,函数模板在调用它或用它对函数指针进行初始化或赋值时实例化。
1、类的实例化
当编写Queueqi时,编译器自动创建...
分类:
编程语言 时间:
2016-05-12 21:57:37
阅读次数:
302