#常说 C++ 是一种多范式的编程语言,怎么理解?
什么是编程范式?
是一种方法论,不同的范式代表解决问题的不同方式。
C++ 是一种多范式编程语言,主要支持以下 5 种编程范式:
- 面向过程
- 面向对象
- 泛型
- 模板元
- 函数式
面向过程
面向过程是 C++ 里最基本的一种编程范式。它的核心思想是“命令”,通常就是顺序执行的语句、子程序(函数),把任务分解成若干个步骤去执行,最终达成目标。
面向过程体现在 C++ 中,就是源自它的前身——C 语言的那部分,比如变量声明、表达式、分支 / 循环 / 跳转语句,等等。
面向对象
面向对象是 C++ 里另一个基本的编程范式。它的核心思想是“抽象”和“封装”,倡导的是把任务分解成一些高内聚低耦合的对象,这些对象互相通信协作来完成任务。它强调对象之间的关系和接口,而不是完成任务的具体步骤。
在 C++ 里,面向对象范式包括 class、public、private、virtual、this 等类相关的关键字,还有构造函数、析构函数、友元函数等概念。
泛型编程
泛型编程是自 STL(标准模板库)纳入到 C++ 标准以后才逐渐流行起来的新范式,核心思想是“一切皆为类型”,或者说是“参数化类型”“类型擦除”,使用模板而不是继承的方式来复用代码,所以运行效率更高,代码也更简洁。
在 C++ 里,泛型的基础就是 template 关键字,然后是庞大而复杂的标准库,里面有各种泛型容器和算法,比如 vector、map、sort,等等。
模板元编程
模板元编程的核心思想是“类型运算”,操作的数据是编译时可见的“类型”,所以也比较特殊,代码只能由编译器执行,而不能被运行时的 CPU 执行。
模板元编程是一种高级、复杂的技术,C++ 语言对它的支持也比较少,更多的是以库的方式来使用,比如type_traits、enable_if 等。
函数式
所谓的“函数式”并不是 C++ 里写成函数的子程序,而是数学意义上、无副作用的函数,核心思想是“一切皆可调用”,通过一系列连续或者嵌套的函数调用实现对数据的处理。
一张图说清楚
资料来源于“极客时间专栏”