Effective C++ 条款01:视C++为一个语言联邦
C++是一个多重泛型的编程语言,支持面向过程、面向对象、函数形式、泛型形式、元编程形式的语言。四种次语言:
- C
- 面向过程
- C++语言是在C语言的基础上进行的扩充,一开始被认为是C with class。这部分包含C语言的:区块(blocks),语句(statements),预处理(preprocessor),内置数据类型(built-in data types)、数组(arrays)、指针(pointers)等。C++是C语言的超集,以C为基础,添加了面向对象、模板,STL等特性。如果用C类型,就显示出了局限:没有模板(templates),异常(exceptions),重载(overloading)。
- Object-Oriented C++
- 面向对象
- C with Class所追求的:classes(类:包括类的属性和方法,构造和析构函数),封装(encapsulation),继承(inheritance),多态(polymorphism),virtual函数(虚函数,动态绑定)等等。这一部分是面向对象在C++上的最直接的实施。
- Template C++
- 泛型编程
- 泛型编程是一种语言机制,通过它可以实现一个通用的标准的容器库,泛型编程可以在多种类型上都能操作,可以重复使用。泛型是一种抽象数据类型,但是泛型不属于面向对象,而是面向对象的补充。- 而由于templates强大的威力,也带来了新的我编程泛型——metaprogramming(TMP,模板元编程)。编译器使用模板产生暂时性的源码,然后再和剩下的源码混合并编译。元编程最大的目的就是用代码生成/操纵代码。
- STL
- STL是一个惠普实验室开发的模板程序库,包含了容器(containers)、迭代器(iterators)和算法(algorithms)以及函数对象(function objects)的规约有极佳的紧密配合和协调。STL的目的是标准化组件,这样就不需要重新开发,可以直接使用现成的组件。