c++:面向对象(封装,继承,多态),STL,模板
一、基础定义与背景
C语言
- 诞生年代:20世纪70年代,Dennis Ritchie在贝尔实验室开发。
- 主要特点 :
- 过程式、结构化编程
- 面向系统底层开发(操作系统、嵌入式系统)
- 高效、灵活、接近硬件
- 标准库较小,功能有限
- 编程思想:强调"做什么"------步骤清晰,硬件级别操作
C++语言
- 诞生年代:20世纪80年代初,由Bjarne Stroustrup在C基础上开发的
- 主要特点 :
- 在C基础添加了面向对象(OOP)支持
- 引入泛型编程(模板)
- 提供异常机制
- 丰富的标准模板库(STL)
- 多范式(面向对象、泛型、函数式、命令式)
- 编程思想:更高级别的抽象("做什么"与"怎么做"解耦)
二、从语法和特性上详细对比
类别 | C 语言特性 | C++ 语言新增特性 | 说明 |
---|---|---|---|
程序范式 | 过程式 | 支持过程式、面向对象、泛型、函数式 | 多范式支持 |
数据抽象 | 结构体(struct ) |
类(class )支持封装、隐藏 |
可以定义私有成员、保护成员 |
继承与多态 | 不支持 | 支持(单继承、多继承、虚函数、多态) | 支持面向对象设计的多态性 |
函数特性 | 普通函数 | 支持函数重载、虚函数、纯虚函数、默认参数 | 强大灵活,支持不同参数版本 |
模板机制 | 不支持 | 支持(函数模板、类模板) | 编写通用容器和算法,代码复用 |
异常处理 | 不支持(错误码处理) | 支持(try-catch 机制) |
提升程序的健壮性 |
命名空间 | 不支持 | 支持(namespace ) |
避免命名冲突,结构更清晰 |
标准库 | stdio.h 、stdlib.h 等 |
引入<iostream> 、<vector> 、<map> 、<algorithm> 等 |
大幅度丰富,方便开发 |
内存管理 | 主要用malloc() 、free() |
支持new 和delete ,以及智能指针(从C++11开始) |
提供更高效安全的内存管理 |
多重继承 | 不支持 | 支持 | 实现复杂对象关系 |
数据封装与访问控制 | 只能通过结构体成员访问 | 支持private 、protected 、public |
更好的数据隐藏和封装 |
三、设计思想与应用层面差异
-
底层接近 vs 高层抽象:
- C偏底层,直接操作内存和硬件
- C++强调抽象与重用,适合复杂系统开发
-
开发效率:
- C代码写在硬件控制、驱动程序
- C++借助STL、面向对象以及模板,可以大大缩短开发时间,提高维护性
-
代码复用:
- C通过函数、头文件"共享"代码
- C++支持继承和模板,实现更灵活的复用
四、具体关键特性比较逐点分析
1. 面向对象支持
- C:不支持面向对象,程序依赖数据和代码的组合实现功能
- C++:支持类、继承、多态、抽象、封装,允许你用"对象"描述问题,更接近人类认知
2. 函数重载
- C:不能定义多个同名但参数不同的函数
- C++:支持重载(一个函数可以有多个不同参数版本)
3. 作用域和命名空间
- C:全局作用域
- C++ :用
namespace
避免命名冲突,比如std::
空间
4. 模板和泛型编程
- C:没有模板机制
- C++ :支持模板,可以编写通用函数和类(如
vector<T>
)
5. 异常机制
- C:错误处理方式单一,多用返回值或全局变量
- C++ :提供
try-catch
机制,更优雅地应对错误
6. 标准库丰富程度
- C :较少,主要函数在
<stdio.h>
、<stdlib.h>
等 - C++ :标准库极其丰富,如IO流(
<iostream>
)、容器(<vector>
、<map>
)、算法(<algorithm>
)
7. 内存管理
- C :手动控制,
malloc()
、free()
- C++ :
new
、delete
,而且引入智能指针(如shared_ptr
、unique_ptr
),避免内存泄漏
8. 继承和多态
- C:不支持
- C++:支持类继承、多态调用(虚函数实现动态联结)
9. 访问控制
- C:结构体成员通常全部公开
- C++ :可以定义成员的访问权限(
private
、protected
、public
)
五、总结
- C:适合系统底层、硬件开发,追求极致性能和简洁
- C++:适合开发大型复杂应用、游戏引擎、数据库、插件,代码更易维护和复用
六、补充思考
- 为什么学C语言? :
- 理解底层原理,掌握硬件操作
- 作为学习C++的基础,不可或缺
- 为什么学C++? :
- 面向对象编程能力,支持现代软件工程
- 利用STL、模板快速开发高效代码