结合上面两篇文章 《C语言速成,语法及示例宝典汇总整理》《C++语言速成,语法及示例宝典汇总整理》,下面整理一篇两种语言语法与使用上的差异
1. 面向对象编程支持
C++ 支持类(class)、继承、多态等特性,C语言不支持。
示例:
cpp
// C++ 示例:类与对象
class Animal {
public:
void speak() { cout << "Animal sound" << endl; }
};
class Dog : public Animal {
public:
void speak() { cout << "Woof!" << endl; } // 重写父类方法
};
c
// C语言无法实现类,通常用结构体和函数指针模拟
struct Animal {
void (*speak)();
};
void animalSpeak() { printf("Animal sound\n"); }
struct Animal a = {animalSpeak};
2. 函数重载
C++ 允许同名函数(参数类型或数量不同),C语言不允许。
示例:
cpp
// C++ 合法
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
c
// C语言报错:重复定义
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; } // 错误!
## 3. 默认参数
C++ 支持函数参数的默认值,C语言不支持。
示例:
cpp
// C++ 合法
void greet(const char* name = "User") {
cout << "Hello, " << name << endl;
}
c
// C语言报错:语法错误
void greet(const char* name = "User") { // 错误!
printf("Hello, %s\n", name);
}
4. 引用 vs. 指针
C++ 提供引用类型(&),作为变量的别名;C语言仅支持指针。
示例:
cpp
// C++ 使用引用交换变量
void swap(int &a, int &b) {
int temp = a;
a = b;
b = temp;
}
c
// C语言必须使用指针
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
5. 动态内存管理
C 使用 malloc/free,C++ 使用 new/delete。
示例:
cpp
// C++
int *arr = new int[10];
delete[] arr;
c
// C
int *arr = (int*)malloc(10 * sizeof(int));
free(arr);
6. 输入输出库
C 使用 stdio.h(如 printf/scanf),C++ 使用 iostream(如 cout/cin)。
示例:
cpp
// C++
int x;
cout << "Enter a number: ";
cin >> x;
c
// C
int x;
printf("Enter a number: ");
scanf("%d", &x);
7. 命名空间
C++ 使用 namespace 避免命名冲突,C语言无此特性。
示例:
cpp
// C++
namespace MyLib {
void print() { cout << "MyLib" << endl; }
}
MyLib::print();
8. 布尔类型
C++ 内置 bool 类型(true/false),C语言 需通过宏定义(如 <stdbool.h>)。
示例:
cpp
// C++
bool flag = true;
c
// C (C99后支持)
#include <stdbool.h>
bool flag = true;
9. 结构体定义
C++ 中结构体可直接使用名称声明变量,C语言 需加 struct 关键字。
示例:
cpp
// C++
struct Point { int x, y; };
Point p1; // 合法
c
// C
struct Point { int x, y; };
struct Point p1; // 必须加 struct
10. 异常处理
C++ 支持 try/catch,C语言 无异常机制。
示例:
cpp
// C++
try {
throw "Error occurred!";
} catch (const char* msg) {
cerr << msg << endl;
}
总结
特性 C语言 C++
编程范式 面向过程 面向对象 + 泛型
函数重载 不支持 支持
默认参数 不支持 支持
引用类型 无 支持
输入输出 printf/scanf cout/cin
动态内存 malloc/free new/delete
命名空间 无 支持
通过上述对比,可以更清晰地理解C与C++在语法和设计哲学上的差异。C++在兼容C的同时,通过面向对象等特性大幅增强了代码的可维护性和复用性。

被折叠的 条评论
为什么被折叠?



