C++ 是在 C 语言基础上扩展而来的编程语言,既兼容 C 语言的面向过程特性,又增加了面向对象、泛型编程等新范式,两者在设计理念、语法特性和应用场景上有显著区别。以下从核心维度对比分析:
C 语言无面向对象概念,C++ 引入类(class) 和对象,实现封装、继承、多态:
- 封装:通过
public/private/protected控制成员访问权限,隐藏内部实现细节。
// C++类示例
class Person {
private:
string name; // 私有成员,外部不可直接访问
public:
void setName(string n) { name = n; } // 提供接口访问私有数据
};
- 继承:子类可复用父类代码,扩展功能。
- 多态:通过虚函数(
virtual)实现运行时动态绑定,父类指针可指向子类对象并调用子类方法。
- 函数重载:C++ 允许同名函数参数列表(类型 / 个数 / 顺序)不同,C 语言不支持(函数名必须唯一)。
// C++函数重载
int add(int a, int b) { return a+b; }
double add(double a, double b) { return a+b; }
- 默认参数:C++ 函数参数可指定默认值,C 语言不支持。
- 内联函数(inline):C++ 用
inline修饰短小函数,编译器尝试嵌入调用处,减少函数调用开销;C 语言需用宏定义模拟(易出错)。
- 引用(&):C++ 新增引用类型(变量别名),作为函数参数时可替代指针,语法更简洁且安全;C 语言仅能通过指针传递地址。
- C++ 新增类型:
bool(布尔型)、string(字符串类)、wchar_t(宽字符)等;C 语言需用typedef或宏模拟布尔型(如#define BOOL int)。
- STL 标准模板库:C++ 提供
vector(动态数组)、map(键值对)、string等容器和算法,直接复用成熟数据结构;C 语言需手动实现数组、链表等。
- new/delete:C++ 用
new动态分配内存(自动调用构造函数)、delete释放(自动调用析构函数);C 语言用malloc/free(仅分配 / 释放内存,不调用构造 / 析构)。
- 智能指针:C++11 后提供
unique_ptr、shared_ptr等智能指针,自动管理内存,避免泄漏;C 语言需手动控制内存生命周期,易出错。
- 兼容性:C++ 兼容绝大多数 C 语言语法,C 语言代码可直接在 C++ 环境编译(少量例外,如
C++中void*需显式转换,C 语言可隐式转换)。
- 编译规则:C++ 编译器对类型检查更严格(如函数参数类型不匹配时编译报错),C 语言相对宽松。
C 语言是 “轻量级、高效的过程式语言”,适合底层和性能敏感场景;C++ 是 “功能全面的多范式语言”,兼容 C 的同时提供更强大的抽象能力,适合复杂系统开发。简单来说:C 是 C++ 的子集,C++ 是 C 的超集并增加了面向对象等特性。