视C++为一个语言联邦

视C++为一个语言联邦

View C++ as a federation of languages

一开始,C++只是C加上一些面向对象特性。 C++ 最初的名称 C with Classes 也反应来这个血缘关系 (Effective C++)


随着C++的不断发展,C++的特性越来越多,甚至有些特性是C++独有的。 学了有一段时间的C++, 向他人请教过C++的技巧,也教过人怎么学习C++。 语法以及技巧不是很难去教授的,但是有一段时间令我头疼的是,如何对新手做一个C++的介绍。 因为C++的特性太多, 而且C++的特性之间又存在一定的联系, 导致很难对一个新手进行一个系统的学习。

直到有一天我再次翻开《Effective C++ 改善程序的55个做法》, 而条款01就是”视C++为一个语言联邦“
可以说,C++其实是一个联邦, 联邦由若干个语言组成, 每个语言都具有自己的特性, 这些特性又相互关联。今天的C++是个多重范式的编程语言, 它同时具有面向过程、面向对象、泛型编程、模板、异常处理、标准库、标准模板库等特性。

语言联邦

  1. Base C language
  2. Object-Oriented C++
  3. Template C++
  4. STL

Base C language

说到底,C++可以理解是一个C语言的超集, 它包含了C语言的所有特性, 并且还增加了面向对象、泛型编程、异常处理、标准库、标准。许多时候一个问题的C++解法, 往往可以由C语言的解法推导而来,也可以说是较为高级、较为抽象的C语言的解法。

Object-Oriented C++

C++语言是面向对象的, 它包含了一些面向对象的特性, 例如: 类、对象、继承、多态、虚函数。
这部分也就是C with classes所诉求的, 它也被称为OO C++: classes, inheritance, and polymorphism.

Template C++

C++的模板特性, 使得C++可以进行泛型编程, 它使得C++可以进行泛型编程。不严谨的说,模板能够批量生成大量功能相似,但是有些许不同的代码。

STL

STL是C++标准模板库, 它提供了一组通用的、可复用的算法和数据结构, 例如: 容器、迭代器、算法、函数对象、适配器、分配器、流、字符串、数值等。然而STL有自己独特的办事方式,当你同STL一同工作,你必须遵守他的约定。

在编程时候, 这些语言联邦中的特性相互之间是相互独立的, 它们之间可以相互组合, 也可以相互分离。 例如,你可以只使用C语言特性完成某些事情,或者在一个类中自己封装一个STL容器, 或者使用STL容器完成一些C++特性。

当你从某个次语言切换到另一个时,导致高效编程守则编程守则要求你改变策略时,不要感到惊讶。因此说C++并不是一个一组带有一组守则一体的语言:它是从四个次语言组成的联邦政府,每个次语言都有自己的规约。
C++高效编程守则视状况而变化,取决于你使用C++的哪一个部分

学习C++的流程

所以说,学习C++本体或许并不一定要掌握C语言,“不必是一个火箭科学家”, 只需要掌握C++的特性, 就可以写出一些有趣的代码。
之后在针对C++的特性进行学习, 例如: 模板、STL、异常处理等。


视C++为一个语言联邦
http://cvrain.cloudvl.cn/2023/11/09/Cpp/view-cpp-as-a-federation/
作者
ClaudeRainer
发布于
2023年11月9日
许可协议