模板与泛型编程--一个泛型句柄类引言:【小心地雷】 这个例子体现了C++相当复杂的语言应用,理解它需要很好地理解继承和模板。在熟悉了这些特性之后再研究这个例子也许会帮助。另一方面,这个例子还能很好地测试你对这些特性的理解程度。 前面示例的Sales_item和Query两个类的使用计数的实现是相同的。这类问题非常适合于泛型编程:可以定义类模板管理指针和进行使用计数。原本不相关的Sales_item...
分类:
编程语言 时间:
2014-05-22 22:46:57
阅读次数:
479
首先一个简单的问题,如何实现交换两个整数的值? 想必每个有编程经验的人都能作答。
C语言用指针实现如下:
void swap(int * a, int * b){
int tmp = *a;
*a = *b;
*b = tmp;
}
C++可以使用引用实现如下:
void swap(int & a, int & b){
int tmp = a;
a ...
分类:
编程语言 时间:
2014-05-22 13:45:35
阅读次数:
286
模板与泛型编程--模板编译模型引言: 当编译器看到模板定义的时候,它不立即产生代码。只有在用到模板时,如果调用了函数模板或定义了模板的对象的时候,编译器才产生特定类型的模板实例。 一般而言,当调用函数时[不是模板],编译器只需看到函数的声明。类似的,定义类类型的对象时,类定义必须可用,但成员函数的定义不是必须存在的。因此,应该将类定义和函数声明放在头文件中,而普通函数和类成员函数的定义放在源文件中...
分类:
编程语言 时间:
2014-05-22 13:37:21
阅读次数:
273
模板与泛型编程--实例化[续]二、函数模板的显式实参 在某些情况下,不可能推断模板实参的类型。当函数的返回类型必须与形参表中所用的所有类型都不同时,最常出现这一问题。在这种情况下,有必要覆盖模板实参推断机制,并显式指定为模板形参所用的类型或值。1、指定显式模板实参 如果函数形参类型不统一,该如何指定sum的返回类型?template
??? sum(T, U);
此时使用任一形参调用都一定...
分类:
编程语言 时间:
2014-05-22 13:05:59
阅读次数:
322
模板与泛型编程--实例化引言: 模板是一个蓝图,它本身不是类或函数。编译器使用模板产生指定的类或函数的特定版本。产生模板的特定类型实例的过程称为实例化。 模板在使用时将进行实例化,类模板在引用实际模板类型时实例化,函数模板在调用它或用它对函数指针进行初始化或赋值时实例化。1、类的实例化 当编写Queueqi时,编译器自动创建名为Queue的类。实际上,编译器通过重新编写Queue模板,用类型in...
分类:
编程语言 时间:
2014-05-22 10:11:06
阅读次数:
367
模板与泛型编程--模板定义[续]四、模板类型形参 类型形参由关键字class或 typename后接说明符构成。在模板形参表中,这两个关键字具有相同的含义,都指出后面所接的名字表示一个类型。 模板类型形参可作为类型说明符在模板中的任何地方,与内置类型说明符或类类型说明符的使用方式完全相同。具体而言,它可以用于指定返回类型或函数形参类型,以及在函数体中用于变量声明或强制类型转换。 template ...
分类:
编程语言 时间:
2014-05-22 06:37:23
阅读次数:
407
条款01:视C++为一个语言联绑C++的四个语言层次:C:C++是以C为基础的。基本数据类型、语句、预处理器、数组、指针等统统来自C。Oject-Oriented
C++:面向对象这一特性包含了:类,封装,继承,多态,虚函数等Template C++:C++的泛型编程能力。STL:一个标准的temp...
分类:
编程语言 时间:
2014-05-22 03:36:57
阅读次数:
338
条款01:视C++为一个语言联绑
C++的四个语言层次:
C:C++是以C为基础的。基本数据类型、语句、预处理器、数组、指针等统统来自C。Oject-Oriented C++:面向对象这一特性包含了:类,封装,继承,多态,虚函数等Template C++:C++的泛型编程能力。STL:一个标准的template库,里面介绍了容器、迭代器、算法以及函数对象等模板类和模板函数。
综述...
分类:
编程语言 时间:
2014-05-21 16:35:40
阅读次数:
265
模板与泛型编程--类模板成员[续2]六、完整的Queue类Queue的完整定义:template class Queue;
template
ostream &operator &);
template class QueueItem
{
friend class Queue;
friend ostream &
operator(ostream &,const Q...
分类:
编程语言 时间:
2014-05-21 14:07:20
阅读次数:
304
模板与泛型编程--类模板成员[续1]二、非类型形参的模板实参template
class Screen
{
public:
Screen():screen(hi * wid,'#'),
cursor(hi * wid),height(hi),width(wid) {}
//..
private:
std::string screen;
std:...
分类:
编程语言 时间:
2014-05-21 14:00:04
阅读次数:
332