模板与泛型编程
--模板编译模型
引言:
当编译器看到模板定义的时候,它不立即产生代码。只有在用到模板时,如果调用了函数模板或定义了模板的对象的时候,编译器才产生特定类型的模板实例。
一般而言,当调用函数时[不是模板],编译器只需看到函数的声明。类似的,定义类类型的对象时,类定义必须可用,但成员函数的定义不是必须存在的。因此,应该将类定义和函数声明放在头文件中,而普通函数和...
分类:
编程语言 时间:
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
模板与泛型编程
--模板特化
引言:
我们并不总是能够写出对所有可能被实例化的类型都最合适的模板。某些情况下,通用模板定义对于某个类型可能是完全错误的,通用模板定义也许不能编译或者做错误的事情;另外一些情况下,可以利用关于类型的一些特殊知识,编写比从模板实例化来的函数更有效率的函数。
compare函数和 Queue类都是这一问题的好例子:与C风格字符串一起...
分类:
编程语言 时间:
2016-05-12 21:57:56
阅读次数:
246
模板与泛型编程
--实例化
引言:
模板是一个蓝图,它本身不是类或函数。编译器使用模板产生指定的类或函数的特定版本。产生模板的特定类型实例的过程称为实例化。
模板在使用时将进行实例化,类模板在引用实际模板类型时实例化,函数模板在调用它或用它对函数指针进行初始化或赋值时实例化。
1、类的实例化
当编写Queueqi时,编译器自动创建...
分类:
编程语言 时间:
2016-05-12 21:57:37
阅读次数:
302
模板与泛型编程
--重载与函数模板
引言:
函数模板可以重载:可以定义有相同名字但参数数目或类型不同的多个函数模板,也可以定义与函数模板有相同名字的普通非模板函数。
但是,声明一组重载函数模板不保证可以成功调用它们,重载的函数模板可能会导致二义性。
一、函数匹配与函数模板
如果重载函数中既有普通函数又有函数模板,确定函数调用的步骤如下:
1...
分类:
编程语言 时间:
2016-05-12 15:33:25
阅读次数:
230
模板与泛型编程
--模板特化[续]
三、特化成员而不特化类
除了特化整个模板之外,还可以只特化push和pop成员。我们将特化push成员以复制字符数组,并且特化pop成员以释放该副本使用的内存:
template<>
void Queue::push(const char *const &val)
{
char *new_item = new...
分类:
编程语言 时间:
2016-05-12 15:32:11
阅读次数:
214
1. C++ = C + 面向对象编程(类) + 泛型编程(模板)
2. 标志main函数头
int main()
{
statements
return 0;
}
3.C++预处理器和iostream文件
名字空间 namespace
名字空间支持是一项C++特性,旨在让你编写大型程序以及将多个厂商现有的代码组和起来时更容易,有助于组织程序。
一个潜在的问题是,可能使...
分类:
其他好文 时间:
2016-05-07 11:22:21
阅读次数:
122
模板与泛型编程
本文尝试着介绍对泛型编程的理解,从而扩展我们的template编程。泛型编程是C++中非常重要的一部分,它使得我们节省了很多编写不同代码的体力。
1. 了解隐式接口和编译器多态与OOP的不同之处面向对象编程世界总是以显式接口和运行期多态解决问题。例如:void doProcessing( Widget &w) {
if (w.size() > 10 && w != som...
分类:
编程语言 时间:
2016-05-06 16:01:48
阅读次数:
166
前言 今日的C++不再是个单纯的“带类的C”语言,它已经发展成为一个多种次语言所组成的语言集合,其中泛型编程与基于它的STL是C++发展中最为出 彩的那部分。在面向对象C++编程中,多态是OO三大特性之一,这种多态称为运行期多态,也称为动态多态;在泛型编程中,多态基于template(模 板)的具现 ...
分类:
编程语言 时间:
2016-05-03 00:12:38
阅读次数:
269