C++刚被推出时是C的加强版,加了一些面向对象的特性。最初的名称为C with Classes。随着时代的进步,C++不断发展,有了各种特性。
现在的C++是一个多重范型编程语言(multiparadigm programming language),它支持
支持过程形式
支持面向对象形式
函数形式
泛型形式
元编程形式
这些能力使得c++成为一个无可匹敌的工具。我们可以把c++理解为相关语言组成的联邦而非单一语言。
为了理解C++,必须认识其主要的次语言。
C
C++以C为基础。所以必须先学好C。区块、语句、预处理、内置数据类型、数组、指针都来自于C。当你以C++内的C成分工作时,高效编程守则映射出C语言的局限:没有模板,没有异常,没有重载
Object-Oriented C++
这部分是c with classes的重点了:classes、封装、继承、多态、virtual….。这一部分是面向对象设计之古典守则在C++上的最直接实施。
Template C++
这个是c++的泛型编程部分。Template的相关考虑与设计已经弥漫了整个c++。由于template过于强大,它们带来了崭新的编程范型,也就是现在火热的template metaprogramming(TMP,模板元编程)。
STL
STL是一个template程序库,它是一个非常特殊的模板库。它对容器、爹地阿奇、算法、以及函数对象的规约有极佳的紧密配合与协调,然而templates及程序库也可以其他想法建置出来。
记住这四个次语言非常重要,当你从某个次语言切换到另一个,导致高效编程守则要求你改变策略。例如对内置(也就是C-like)类型而言pass-by-value通常比pass-by-reference高效,但当你从C part of C++移往Object-Oriented C++,由于用户自定义构造函数和析构函数的存在,pass-by-reference-to-const往往更好。运用TemplateC++时尤其如此,因为彼时你甚至不知道所处理的对象的类型。