
hello,大家好,我是程序员黎明 ,很多人可能不太了解C语言和C++的区别,本期我将带你学会区分它。
其中C语言侧重于面向过程的编程,强调一步步操作;而C++引入了面向对象的思想,让程序结构更加灵活。
1. 面向过程 vs 面向对象
-
C语言是面向过程的。意思就是:做事一步步来,像做饭一样,得先洗菜,再切菜,然后炒菜,最后出锅,所有步骤都得自己按顺序来。
-
C++是面向对象的。就好比有了厨师,你不用亲自做每一步了,先找个厨师,让他去处理。你只需要告诉厨师做什么就行,比如“做个西红柿炒蛋”,然后剩下的步骤让他自己搞定。
C语言面向过程的例子:
用C语言写一个简单的加法和乘法计算器,我们得一步步来写函数,让程序去按顺序执行:
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) {
return a * b;
}
int main() {
int num1 = 5, num2 = 10;
printf("加法结果: %d\n", add(num1, num2));
printf("乘法结果: %d\n", multiply(num1, num2));
return 0;
}
你看,C语言里我们得写add和multiply两个函数,程序是一步步按函数来做事,像流水线一样。
C++面向对象的例子:
C++里,我们可以找个“对象”来干活。比如我们写个“计算器”类,让它来加法和乘法:
#include <iostream>
using namespace std;
class Calculator {
public:
int add(int a, int b) {
return a + b;
}
int multiply(int a, int b) {
return a * b;
}
};
int main() {
Calculator calc; // 创建一个计算器对象
int num1 = 5, num2 = 10;
cout << "加法结果: " << calc.add(num1, num2) << endl;
cout << "乘法结果: " << calc.multiply(num1, num2) << endl;
return 0;
}
在C++里,我们先造了个“计算器”(Calculator类),让它负责处理加法和乘法。你只要创建一个calc对象,然后让它去做事,代码看起来就像是在和对象对话一样。
2. 类和对象
在C++里,你可以通过类定义一些东西,比如“车子”的属性和功能,然后根据这个类生成具体的对象(相当于车子的一辆具体实例)。而C语言没有类这种东西,只能通过函数和结构体来模拟。
C++类和对象的例子:
比如,咱们想定义一个“车子”的类,每辆车子都有自己的品牌和速度,还能加速和减速:
#include <iostream>
#include <string>
using namespace std;
class Car {
private:
string brand; // 品牌
int speed; // 速度
public:
// 构造函数
Car(string b, int s) : brand(b), speed(s) {}
void accelerate(int amount) {
speed += amount;
cout << brand << " 加速到 " << speed << " km/h" << endl;
}
void brake(int amount) {
speed -= amount;
cout << brand << " 减速到 " << speed << " km/h" << endl;
}
};
int main() {
Car myCar("Toyota", 50); // 创建一辆丰田车,初始速度50
myCar.accelerate(20); // 加速到70
myCar.brake(30); // 减速到40
return 0;
}
这个例子中,我们定义了一个“车子”的类,给它加上“加速”和“减速”的功能,然后通过myCar对象去操作。每辆车子(对象)都有自己不同的品牌和速度。
3. 函数重载
C++还有个挺方便的功能,叫函数重载。就是说你可以写多个同名的函数,但参数不同,C++会自动根据传入的参数选择合适的函数。C语言不支持这一点。
C++函数重载的例子:
#include <iostream>
using namespace std;
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int main() {
cout << "整数相加: " << add(3, 5) << endl; // 输出 8
cout << "浮点数相加: " << add(3.5, 4.2) << endl; // 输出 7.7
return 0;
}
C++里,add函数可以同时处理整数和浮点数相加,而不需要取不同名字。这是因为C++会自动识别参数类型,而C语言就不行,得手动区分不同类型的函数。
4. 内存管理
-
C语言里的内存管理是“亲力亲为”的。你申请内存的时候要用
malloc,用完后得自己用free手动释放,不然内存会泄漏。 -
C++更智能。你可以定义构造函数(对象创建时自动调用)和析构函数(对象销毁时自动调用),系统帮你自动管理内存,不需要自己手动释放。
C语言手动管理内存的例子:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr = (int*)malloc(5 * sizeof(int)); // 申请内存
for (int i = 0; i < 5; i++) {
arr[i] = i + 1;
printf("%d ", arr[i]);
}
free(arr); // 手动释放内存
return 0;
}
C语言里得手动分配和释放内存,写完程序后你得记得free掉,不然会浪费内存。
C++里自动内存管理的例子:
#include <iostream>
using namespace std;
class Array {
private:
int* data;
int size;
public:
Array(int s) : size(s) {
data = new int[size]; // 自动分配内存
for (int i = 0; i < size; i++) {
data[i] = i + 1;
}
cout << "数组创建完成。" << endl;
}
~Array() {
delete[] data; // 自动释放内存
cout << "数组内存已释放。" << endl;
}
void print() {
for (int i = 0; i < size; i++) {
cout << data[i] << " ";
}
cout << endl;
}
};
int main() {
Array arr(5); // 创建数组对象
arr.print(); // 输出 1 2 3 4 5
return 0;
}
C++里我们用new来申请内存,然后在析构函数里自动释放内存。这样你不用操心内存的分配和释放,系统帮你管理。
5. 标准库的丰富性
C++的标准库功能比C语言多得多。比如C++有现成的std::vector可以代替C语言里的手动数组管理,std::string可以方便地处理字符串,而C语言就得自己写这些功能。
C++使用标准库的例子:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> numbers = {1, 2, 3, 4, 5};
numbers.push_back(6); // 向vector添加一个元素
for (int num : numbers) {
cout << num << " ";
}
cout << endl;
return 0;
}
这个例子中,我们用C++的vector(动态数组)代替了C语言里手动申请内存的方式。vector可以自动扩展,也不用我们自己去管理内存,方便很多。
总结:
-
C语言就像是老派做事方式,事事都要自己亲力亲为,程序是一步步地按你写的顺序来执行。 -
c++是进阶版,给你更多高级工具和功能,比如对象、类、函数重载、自动内存管理,方便写复杂程序。
尽管C++功能强大,但C语言简单、直接,适合搞底层开发或者资源有限的场景。好了,本期我们就学到这里啦,我们下期不见不散!


