一、核心区别与联系
1. 编程范式
- C:纯过程式语言,核心是函数和结构体,通过函数调用操作数据。
- C++ :多范式语言,支持:
- 过程式(与C兼容)
- 面向对象(类、继承、多态)
- 泛型编程(模板)
- 元编程(编译期计算)
- 函数式(lambda表达式)
2. 类型系统
- C :
- 弱类型检查(隐式转换普遍)
- 无函数重载、运算符重载
- 结构体不能包含函数
- C++ :
- 强类型检查(需显式转换)
- 支持函数重载(通过签名区分)
- 运算符重载(如
operator+
) - 类可包含成员函数和静态函数
3. 内存管理
- 相同点 :都使用
malloc/free
和new/delete
(C++特有) - C++增强 :
- RAII机制(资源获取即初始化)
- 智能指针(
unique_ptr
,shared_ptr
) - 析构函数自动调用
- 容器类(
vector
,map
)管理内存
4. 标准库
- C :
- 核心库:
stdio.h
,stdlib.h
,string.h
- 功能:基础I/O、内存管理、字符串操作
- 核心库:
- C++ :
- C标准库子集(
cstdio
,cstdlib
等) - STL(标准模板库):
- 容器(
vector
,list
,map
) - 算法(
sort
,find
) - 迭代器
- 函数对象
- 容器(
- 新增流库(
iostream
替代stdio.h
)
- C标准库子集(
5. 编译与执行
- C :
- 单次编译:源文件 → 目标文件 → 可执行文件
- C++ :
- 支持模板实例化(编译期生成代码)
- 名称修饰(name mangling)支持函数重载
- 链接时优化(LTO)更复杂
二、具体特性对比
1. 函数相关
特性 | C | C++ |
---|---|---|
函数重载 | 不支持 | 支持 |
默认参数 | 不支持 | 支持 |
内联函数 | 通过宏实现 | 真正的inline关键字 |
函数模板 | 无 | 支持 |
异常处理 | setjmp/longjmp | try/catch/throw |
2. 面向对象特性
特性 | C(模拟) | C++(原生) |
---|---|---|
封装 | 结构体+函数指针 | class/struct/access specifiers |
继承 | 手动模拟 | 直接语法支持 |
多态 | 函数指针数组 | 虚函数表 |
抽象 | 无直接支持 | 纯虚函数/抽象类 |
3. 标准库差异
领域 | C | C++ |
---|---|---|
I/O | stdio.h (printf/scanf) | iostream (cout/cin) |
字符串 | char[] + string.h | std::string类 |
容器 | 无 | STL容器(vector,map等) |
算法 | 需手动实现 | STL算法(sort,find等) |
多线程 | pthread等库 | std::thread(C++11起) |
三、从C到C++的学习路径
1. 基础过渡阶段
-
C风格代码的C++写法
-
用
cout/cin
替代printf/scanf
-
用
std::string
替代C字符串 -
用
vector
替代动态数组
-
-
理解引用与指针的区别
cpp
void swap(int &a, int &b) { // C++引用
int temp = a;
a = b;
b = temp;
}
void swap(int *a, int *b) { // C指针
int temp = *a;
*a = *b;
*b = temp;
}
2. 面向对象编程学习
2. 面向对象编程学习
-
类与对象基础
cppclass Rectangle { private: int width, height; public: Rectangle(int w, int h) : width(w), height(h) {} int area() { return width * height; } };
-
三大特性深入
-
封装:访问控制(public/private/protected)
-
继承:单继承、多继承、虚继承
-
多态:虚函数、override、final
-
3. 高级特性掌握
-
模板编程
cpptemplate <typename T> T max(T a, T b) { return a > b ? a : b; }
-
现代C++特性(C++11/14/17/20)
-
智能指针
-
Lambda表达式
-
移动语义
-
并发支持
-