软件开发的家园,编程爱好者的天地.

现在是:北京时间 2016/4/14 上午11:50:51 星期四

设为首页  |  加入收藏  |  网站地图

泛型编程与设计新思维
发布于:第八基地 来源:互联网 作者:天堂路上 时间:2011-10-14 点击:262
泛型编程与设计新思维

徐景周(出处不详)前言  永远记住,编写代码的宗旨在于简单明了,不要使用语言中的冷僻特性,耍小聪明,重要的是编写你理解的代码,理解你编写的代码,这样你可能会做的更好。---HerbSutter  1998年,国际C标准正式通过,标准化对C最重要的贡献是:对"强大的抽象概念"给于更有力的支持,以降低软件的复杂度,C提供了二种功能强大的抽象方法:面向对象编程与泛型编程。面向对象编程大家一定很熟悉了,这里就不再哆嗦了。提到泛型编程(GenericProgramming),有的人可能还不太熟悉,但是提到STL,你就一定会有所耳闻了。STL(StandardTemplateLibrary,标准模板库)其实就是泛型编程的实现品,STL是由AlexanderStepanov(STL之父)、DavidRMusser和MengLee三位大师共同发展,于1994年被纳入C标准程序库。STL虽然加入C标准库的时间相对较晚,但它却是C标准程序库中最具革命性的部分,同时也是C标准程序库中最重要的组成部分。由于新的C标准库中几乎每一样东西都是由模板(Template)构成的,当然,STL也不会例外。所以,在这里有必要先概要说明一下模板的有关概念。模板概念  通过使用模板可以使程序具有更好的代码重用性。记住,模板是对源代码进行重用,而不是通过继承和组合重用对象代码,当用户使用模板时,参数由编译器来替换。模板由类模板和函数模板二部分组成,以所处理的数据类型的说明作为参数的类就叫类模板,而以所处理的数据类型的说明作为参数的函数叫做函数模板。模板参数可以由类型参数或非类型参数组成,类型参数可用class和typename关键字来指明,二者的意义相同,都表示后面的参数名代表一个潜在的内置或用户定义的类型,非类型参数由一个普通参数声明构成。下面是类模板和函数模板的简单用法:template<classT1,intSize>classQueue//类模板,其中T1为类型参数,Size为非类型参数{public:explicitQueue():size_(Size){};//显式构造,避免隐式转换……template<classT2>voidassign(T2first,T2last);//内嵌函数模板private:T*temp_;intsize_;}//类模板中内嵌函数模板Compare的外围实现(如在Queue类外实现)template<classT1,intSize>template<classT2>voidQueue<T1,Size>::assign(T2first,T2last){};//模板的使用方法intia[4]={0,1,2,3};Queue<int,sizeof(ia)/sizeof(int)>qi;qi.assign(ai,ai4);泛型编程  泛型编程和面向对象编程不同,它并不要求你通过额外的间接层来调用函数,它让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型编程的代表作品STL是一种高效、泛型、可交互操作的软件组件。所谓泛型(Genericity),是指具有在多种数据类型上皆可操作的含意,与模板有些相似。STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。STL以迭代器(Iterators)和容器(Containers)为基础,是一种泛型算法(GenericAlgorithms)库,容器的存在使这些算法有东西可以操作。STL包含各种泛型算法(algorithms)、泛型指针(iterators)、泛型容器(containers)以及函数对象(functionobjects)。STL并非只是一些有用组件的集合,它是描述软件组件抽象需求条件的一个正规而有条理的架构。

对我有帮助
(0)
0%
对我没帮助
(0)
0%
返回顶部
在线反馈
在线反馈