首页 > 编程笔记 > C++笔记 阅读:7

什么泛型编程,C++泛型编程简介(新手必看)

泛型编程对 C++ 来说,其重要性不亚于面向对象特性。泛型程序设计(generic programming)是一种算法在实现时不指定具体要操作的数据类型的程序设计方法。所谓“泛型”,指的是算法只要实现一遍,就能适用于多种数据类型。

泛型程序设计的优势在于能有效减少重复代码的编写,其最成功的应用就是C++标准模板库(STL)。

C++ 中,模板分为函数模板和类模板两种。熟练的 C++ 程序员,编写函数时会考虑能否将其写成函数模板,编写类时会考虑能否将其写成类模板,以便实现代码的复用。换句话说,泛型编程就是大量编写模板和使用模板的程序设计。

函数重载和泛型编程的区别:

强类型语言与C++模板

Fortran、C、C++ 等高级程序语言出现后,又陆续发展出许多编程语言。这些编程语言根据“在定义变量时是否需要显式地指明数据类型”,可以分为强类型语言和弱类型语言:
类型对于编程语言来说非常重要,不同的类型支持不同的操作。例如,class Student 类型的变量可以调用 display() 函数,int 类型的变量就不行。

对于强类型语言来说,变量的类型通常是不变的(多态和虚函数是一种例外),程序一般是先编译后执行,因此又称为编译型语言。

强类型语言较为严谨,在编译阶段就能检测出大量的错误,而且其集成开发环境(IDE)通常比较强大,代码感知能力好,提示信息丰富。因此,强类型语言更适合开发大型、系统级、工业级的软件项目。

对于弱类型语言来说,变量的类型不确定,赋予变量什么类型的数据它就是什么类型。弱类型语言通常是一边编译一边执行,所以又称为解释型语言。弱类型语言一般在编辑器中直接书写代码,它较为灵活,编码效率高,部署容易,学习成本低,通常在 Web 开发中大显身手。

C++ 是强类型语言,比较“死板”,而 C++ 模板则很好地弥补了强类型语言“不够灵活”的缺点。

事实上,C++ 模板是被迫推出的,起初是为了封装数据结构。数据结构关注的是数据的存储,以及存储后如何进行增加、删除、修改和查询操作。C++ 开发者们希望为线性表、链表、图、树等常见数据结构都定义一个类,并把它们加入到标准库中,这样后续开发时可以直接调用,而不用重复地造“轮子”。

但想法美好,却遇到一个无法解决的问题,即数据结构中每份数据的类型都无法提前预测。以链表为例,它的结点可以用来存储小数、整数、字符串等,也可以用来存储类、结构体等,还可以直接存储二进制数据。C++ 是强类型语言,对数据类型有着严格限制,这种矛盾是无法调和的。于是,模板就诞生了。

模板虽然不是 C++ 的首创,但却在 C++ 中大放异彩,后来也被 Java、C# 等其他强类型语言采用。

C++ 模板非常重要,整个标准库几乎都是使用模板来开发的。标准模板库(STL)是 C++ 对数据结构进行封装后的称呼,是 C++ 的灵魂之所在。

相关文章