C语言相比C语言,究竟扩充了哪些特性?

99ANYc3cd6
预计阅读时长 11 分钟
位置: 首页 C语言 正文

C++ 并非 C 的一个严格超集,虽然 C++ 的设计初衷是“带类的 C”(C with Classes),并且兼容了绝大部分 C 语言的特性,但为了语言的严谨性、安全性和面向对象的设计,C++ 标准也废弃了一些 C 语言中的不安全或过时的特性。

简析c 语言对c语言做了哪些扩充
(图片来源网络,侵删)

我们可以将 C++ 对 C 的改动和扩充分为以下几个层面:


核心思想的扩充:从“过程化”到“面向对象”

这是 C++ 最根本、最重要的扩充,C 语言是过程化的,程序由函数和数据构成,数据和操作数据的函数是分离的,而 C++ 引入了,将数据和对数据的操作封装在一起,实现了面向对象编程

  • 封装

    • class/struct:C++ 引入了 class 关键字,并扩展了 struct 的功能,使其可以包含成员函数(方法)。
    • 访问控制:通过 public(公有)、private(私有)、protected(保护)关键字,控制类成员的访问权限,隐藏了内部实现细节,只暴露必要的接口。
    • this 指针:在类的成员函数中,编译器会自动传递一个指向当前对象本身的 this 指针。
  • 继承

    简析c 语言对c语言做了哪些扩充
    (图片来源网络,侵删)

    允许创建一个新类(派生类/子类)来继承一个已有类(基类/父类)的属性和方法,这实现了代码的重用和层次化设计。

  • 多态

    • 虚函数:通过 virtual 关键字声明函数,允许在基类中定义接口,在派生类中实现不同的具体行为。
    • 动态绑定:在运行时根据对象的实际类型来调用相应的函数,而不是根据指针或引用的声明类型,这是实现“同一接口,不同行为”的关键。

核心语言特性的扩充

在 C 语言的基础上,C++ 增加了大量的关键字和语法糖,使编程更灵活、安全和高效。

特性类别 C++ 扩充内容 简要说明
新增关键字 class, public, private, protected, virtual, template, namespace, new, delete, try, catch, throw, bool, true, false 等。 这些关键字是实现 OOP、泛型编程、异常处理等新特性的基础。
输入/输出 iostream 库 (cin, cout, cerr) 取代了 C 语言中 stdio.hprintfscanfiostream 是类型安全的、可扩展的,并且支持用户自定义类型的流插入/提取操作符重载。
内存管理 new / delete 提供了比 C 语言中 malloc / free 更安全的动态内存分配方式。new 会自动调用对象的构造函数,delete 会自动调用析构函数。
函数增强 - 函数重载:允许定义多个同名函数,只要它们的参数列表(类型、个数、顺序)不同。
- 默认参数:可以为函数参数提供默认值。
- 内联函数:使用 inline 关键字建议编译器将函数代码直接插入到调用处,以消除函数调用的开销。
这些特性增强了函数的灵活性和效率。
作用域与命名 - 命名空间:使用 namespace 关键字解决大型项目中命名冲突的问题。
- 引用& 符号用于声明变量的别名,是函数参数传递和返回值时更安全、更直观的选择,避免了指针的复杂性。
引用极大地简化了代码,尤其是在操作对象时。
错误处理 异常处理机制 (try, catch, throw) 提供了一种结构化的、可扩展的错误处理方式,相比 C 语言中通过返回错误码或 setjmp/longjmp 的方式,更清晰、更安全。
布尔类型 bool, true, false C 语言没有内置的布尔类型,通常用 0 和非 0 来表示假和真,C++ 引入了真正的布尔类型,使逻辑判断更清晰。
运算符重载 允许用户自定义运算符(如 , , <<, [])在特定类型上的行为。 这是 C++ 非常强大的特性,使得自定义类型的对象可以像内置类型一样自然地使用运算符,极大地提高了代码的可读性和易用性。

泛型编程与标准库的扩充

这是 C++ 相对于 C 的另一个革命性飞跃。

简析c 语言对c语言做了哪些扩充
(图片来源网络,侵删)
  • 模板

    • 函数模板:可以编写一个与类型无关的函数,编译器会根据实际调用时传入的类型自动生成具体的函数版本。
    • 类模板:同样可以创建与类型无关的类,如 std::vectorstd::list 等。
    • 模板是 C++ 泛型编程 的基础,允许编写“类型无关”的通用代码,极大地提高了代码的复用性。
  • 标准模板库

    • C++ 引入了庞大的标准库,其中最核心的就是 STL,STL 提供了:
      • 容器:如 vector (动态数组), list (链表), map (键值对), set (集合) 等。
      • 算法:如 sort (排序), find (查找), copy (复制), for_each (遍历) 等。
      • 迭代器:提供了一种统一的方法来遍历和访问容器中的元素,将容器和算法解耦。
    • 使用 STL,开发者可以避免重复“造轮子”,用更少的代码实现更复杂、更高效的功能。

C++ 废弃/修改的 C 语言特性

为了语言的严谨和安全,C++ 标准中的一些特性与 C 标准不完全一致,甚至被废弃。

  1. void* 的限制*在 C 语言中,`void` 类型的指针可以隐式转换为任何其他类型的指针,在 C++ 中,这种隐式转换被认为是不安全**的,必须通过显式类型转换(如 static_cast)来完成。
  2. 隐式函数声明:在 C 语言中,如果一个函数在使用前没有声明,编译器会默认为其返回 int 类型,这是一种不安全的隐式行为,C++ 要求所有函数必须在使用前声明或定义。
  3. 更严格的类型检查:C++ 的类型系统比 C 更严格,C 允许将 const char* 赋值给 char*,而 C++ 不允许,因为这会破坏 const 的安全性。
  4. 新增关键字:C++ 中的关键字(如 new, class, template 等)在 C 语言中可能是合法的标识符,用 C 编译器编译一个 C++ 程序几乎肯定会失败。

C++ 对 C 语言的扩充是革命性的,而非简单的增量式改进,它从以下几个方面彻底改变和扩展了 C 语言:

  1. 编程范式:从过程化升级为面向对象,引入了封装、继承、多态。
  2. 语言能力:增加了泛型编程能力(模板)、异常处理命名空间引用等现代编程语言的核心特性。
  3. 工具库:提供了功能强大的标准模板库,极大地提高了开发效率和代码质量。
  4. 安全性:通过更严格的类型检查、废弃不安全的隐式转换等方式,提升了代码的健壮性和安全性。

可以说,C++ 保留了 C 语言对底层硬件的控制能力(C++ 仍然可以用于系统级编程),同时将其提升到了一个更高层次的抽象,使其成为一门功能全面、支持多种编程范式的强大语言。

-- 展开阅读全文 --
头像
dede field global是什么?如何使用?
« 上一篇 2025-12-19
dede arclistsg排序如何自定义字段与方向?
下一篇 » 2025-12-19

相关文章

取消
微信二维码
支付宝二维码

目录[+]