My C++之初识GP

 

标题的名称为“初识GP”,其实第一眼看到GP二字,我很快联想到穿越火线中的GP,还好以前没有人问起我GP,要不然我可能会回答我有多少多少GP(指不定要雷死人了)…其实也不能怪我,现在的人都喜欢念缩写的英文,难免会有些瞎想,呵呵、、、瞎扯了、、

GP就是Generic Programming(泛型编程),其实说初识泛型编程也不能完全算数,我以前为了图方便也用过vector,但只停留在“用”,对于泛型毫无概念。什么是泛型编程?C++primer中的解释是:“所谓泛型编程就是独立于任何特定类型的方式编写代码”。是不是太专业化了?通俗地讲就是使用于广泛类型对象的编程,我们都知道程序很重要的一点就是通用性的问题,就拿一般的函数说,函数里面有形参列表,为什么要有形参列表?目的就是将函数内所需使用的统一类型对象抽离出来做为形参,这样函数可以接受任何不同的实参(当然类型已经固定)。同理,泛型编程也类似,不同的是,它抽离出来的不是对象,而是类型,注意了,是类型!也就是说把一个原本特定于某个类型的算法或类当中的类型信息抽掉,将其参数化。

今天还看了一下模板,当然,没有模板也就没有C++的泛型编程,因为它就是将算法和类中的类型信息存储在模板当中,而且显然泛型编程的多态性是静态的,不像面向对象编程中的动态多态性是基于运行期的,它是基于编译期的,所以它也就与类继承方面没有任何关系,因为只要实例化中实参类型支持特定的语法接口就行了,比如说你的模板类中有begin()函数,那么你实参类型对象应该也得支持这个begin()接口就行。无所谓任何继承关系的约束,所以泛型编程的通用性比起面向对象的动态多态性要更好些。当然凡是有两面性,既然你的通用性强,那么如何模板的定义必然很费心,因为你要你模板里面的结构适合于你所有的实参类型对象。

提到了泛型编程而没有提STL,实在是惭愧,因为它是泛型编程的经典之作,但因为还没好好学过,而且其内容确实很广,但后面肯定会写的,凡事一步一个脚印,步子迈大了容易扯着蛋、、、、、、

         一心向学_____

你可能感兴趣的:(C++)