一开始,C++只是 C 加上一些面向对象的特性。C++最初的名称 C with Classes 也反映了这个血缘关系。
但是,现在,当这个语言逐渐成熟,它变得更活跃更无拘束,更大胆冒险,开始接受不同于 C with Classes 的各种观念、特性和编程战略。
今天的 C++ 已经是个多重泛型编程语言,一个同时支持过程形式、面向对象形式、函数形式、泛型形式、元编程形式的语言。
那,我们又该如何理解这样一个语言呢?
最简单的办法是将 C++ 视为一个有相关语言组成的联邦的而非单一语言。
为了理解C++,你必须认识其主要的次语言:
-
C。说到底 C++ 仍是 以 C 为基础。
区块(blocks)、语句(statements)、预处理器(preprocessor)、内置数据类型(built-in data typpes)、数组(arrays)、指针(pointers)等统统来自 C 。
但是 C 语言也有很多局限:没有模板、没有异常、没有重写。
-
Object-Oriented C++ 。
这部分包括 classes(构造函数 和 析构函数)、封装(encapsulation)、继承(inheritance)、多态(polymorphism)、virtual 函数(动态绑定)……
Template C++ 。 这是 C++泛型编程的部分。
STL。STL 是个 template 程序库。它对容器(containers)、迭代器(iterators)、算法(algorithms)以及函数对象(function objects)的规约有着极佳的紧密配合与协调。
记住这四个次语言,当你从某个次语言切换到另一个,导致高效编程守则要求你改变策略时,不要感到惊讶。例如:
对内置类型而言 pass-by-value 通常比 pass-by-reference 高效;但当你从 C part of C++ 移往 Object-Oriented C++,由于用户自定义(user-defined)构造函数和析构函数的存在, pass-by-reference 往往更好。
因此,C++ 并不是一个带有一组守则的一体语言;它是从四个次语言组成的联邦*,每个次语言都有自己的规约。记住这四个次语言你就会发现 C++ 容易了解的多。