C 和 C++ 都是编译型语言,C++ 起源于 C,但两者并不完全兼容。
| 对比项 | C | C++ |
|---|---|---|
| 编程思想 | 主要是面向过程 | 支持面向过程、面向对象、泛型编程 |
| 类和对象 | 不支持 | 支持 class、对象、封装、继承、多态 |
| 函数重载 | 不支持 | 支持同名不同参数的函数 |
| 泛型编程 | 不支持模板 | 支持模板和 STL |
| 异常处理 | 没有标准异常机制 | 支持 try、catch、throw |
| 命名空间 | 不支持 | 支持 namespace |
| 内存管理 | malloc() / free() |
new / delete,现代 C++ 常用智能指针 |
| 输入输出 | printf() / scanf() |
cout / cin,也可以使用 C 的方式 |
| 字符串 | 通常使用字符数组 | 支持 std::string |
struct |
主要用于保存数据 | 可以包含函数、构造函数等,功能接近 class |
| 常见应用 | 操作系统、嵌入式、驱动、底层库 | 游戏、桌面软件、高性能程序、大型工程 |
示例:输入输出
C:
#include <stdio.h>
int main() {
int age;
scanf("%d", &age);
printf("age = %d\n", age);
return 0;
}
C++:
#include <iostream>
int main() {
int age;
std::cin >> age;
std::cout << "age = " << age << std::endl;
return 0;
}
示例:面向对象
C 中通常需要使用结构体和函数配合:
struct Person {
int age;
};
void show(struct Person p) {
printf("%d\n", p.age);
}
C++ 可以把数据和函数封装在类中:
class Person {
public:
int age;
void show() {
std::cout << age << std::endl;
}
};
需要注意
很多简单的 C 代码可以用 C++ 编译器编译,但并不是所有 C 代码都兼容 C++。例如,C++ 对类型转换、关键字和一些语法规则更加严格。
面向过程
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护。