前言:C语言是由Dennis Ritchie于20世纪70年代开发的一种通用编程语言,采用了向过程的编程思想。

C++语言是由Bjarne Stroustrup于20世纪80年代开发的一种更高级的编程语言,采用面向对象的编程思想。

目录

一、编程思想解析

二、代码例子对比

1)C语言(面向过程):数据与操作数据的函数分离 顺序执行

2)C++(面向对象):封装类,数据与行为绑定

三、适用场景

四、总结


一、编程思想解析

所谓面向过程,以“函数/过程”为核心,按照函数调用顺序执行,按步骤实现功能。该思想关注的是“怎么做”。

所谓面向对象,以“对象”为核心,将不同的方法封装在在不同的类内,根据具体目的来调用相应的对象去实现。该思想关注的是“谁来做”。

类比一个实际例子:(做一道菜)

面向过程思想:按步骤 1.买菜 -> 2.洗菜 -> 3.切菜 -> 4. 炒菜 - > 5.装盘。

面向对象思想:对象是 厨师(炒菜),帮厨(买菜、洗菜、切菜、装盘),食材(白菜、猪肉、鱼肉),炒锅(煮菜工具),各司其职,而非按步骤顺序罗列。

二、代码例子对比

以学生成绩管理功能为例:

1)C语言(面向过程):数据与操作数据的函数分离 顺序执行

#include <iostream>
#include <string>
using namespace std;

// 定义数据结构:存储学生信息(仅数据,无行为)
struct Student {
    string name;   // 姓名
    int id;        // 学号
    int scores[3]; // 3门课成绩
};

// 函数1:计算总分(操作外部的Student数据)
int calculateTotalScore(const Student& stu) {
    int total = 0;
    for (int score : stu.scores) {
        total += score;
    }
    return total;
}

// 函数2:打印学生信息(操作外部的Student数据)
void printStudentInfo(const Student& stu) {
    int total = calculateTotalScore(stu);
    cout << "学号:" << stu.id << endl;
    cout << "姓名:" << stu.name << endl;
    cout << "总分:" << total << endl;
}

int main() {
    // 步骤1:定义数据
    Student stu;
    stu.name = "zgh";
    stu.id = 2025001;
    stu.scores[0] = 85;
    stu.scores[1] = 90;
    stu.scores[2] = 78;

    // 步骤2:按顺序调用函数(过程化执行)
    printStudentInfo(stu);

    return 0;
}

数据(Student结构体)与操作数据的函数(calculateTotalScore/printStudentInfo)分离;

主函数按“数据定义 ->函数调用”的步骤顺序执行,核心是过程化;

若需要扩展功能(如修改成绩),需新增函数,维护成本较高。

2)C++(面向对象):封装类,数据与行为绑定

#include <iostream>
#include <string>
using namespace std;

// 定义类:封装学生的属性和方法
class Student {
private:
    // 私有属性:仅类内部可访问(封装性)
    string name;
    int id;
    int scores[3];

public:
    // 构造函数:初始化对象属性
    Student(string n, int i, int s1, int s2, int s3) {
        name = n;
        id = i;
        scores[0] = s1;
        scores[1] = s2;
        scores[2] = s3;
    }

    // 方法1:计算总分(类内部方法,访问私有属性)
    int calculateTotalScore() const {
        int total = 0;
        for (int score : scores) {
            total += score;
        }
        return total;
    }

    // 方法2:打印信息(类内部方法)
    void printInfo() const {
        int total = calculateTotalScore();
        cout << "学号:" << id << endl;
        cout << "姓名:" << name << endl;
        cout << "总分:" << total << endl;
    }

    // 可选:提供接口修改属性(封装的扩展,避免直接操作私有数据)
    void setScore(int index, int newScore) {
        if (index >= 0 && index < 3) {
            scores[index] = newScore;
        }
    }
};

int main() {
    // 创建对象:通过类实例化,属性通过构造函数初始化
    Student stu("zgh", 2025001, 85, 90, 78);

    // 调用对象的方法:对象自主完成行为(“谁来做”)
    stu.printInfo();

    // 扩展:修改成绩(通过类提供的接口,保证数据安全)
    stu.setScore(2, 88);
    cout << "\n修改第3门成绩后:" << endl;
    stu.printInfo();

    return 0;
}
  • 数据(name、score、id)私有化,避免被外部非法纂改;
  • 数据与行为(计算、打印成绩等)绑定在一个类中,对象化;
  • 新增功能只需在类内新增方法,不影响外部代码。

三、适用场景

1)C语言(面向过程编程)适用于嵌入式开发、驱动开发等。

场景

典型案例

理由

嵌入式开发

单片机程序、设备固件

1. 对内存占用、运行效率要求极致;

2. 直接操作寄存器、硬件接口,C 语法更简洁,无额外开销;

3. 嵌入式编译器对 C 的支持更完善

操作系统

内核开发

Linux 内核、驱动程序

1. 内核层需要极致的性能和可控性,C++ 的虚函数、异常等会引入不可控的开销;

2. 内核代码追求简洁、可调试,C 的过程式风格更易维护。

高性能底层库

基础算法库、网络协议栈

1. 库需要被多语言调用,C 的 ABI(应用二进制接口)更稳定;

2. 无额外封装开销,调用效率最高。

2)C++(面向对象编程)适用于大型工程、需模块化的复杂系统、跨平台开发。

场景

典型案例

理由

大型工程 

复杂系统开发

游戏引擎、智能驾驶

1. 面向对象特性(封装 / 继承 / 多态)降低复杂系统的耦合度,便于团队协作和维护;

2. STL 提供丰富的容器(vector/map)和算法,提升开发效率。

高性能应用开发

图形渲染(OpenGL/DirectX)、高频交易系统

1. 保留 C 的高性能,同时用 OOP / 泛型编程简化代码;

2. 支持运算符重载、模板等特性,适合编写高效且易读的算法。

跨平台应用开发

Qt 框架开发的桌面软件、跨平台工具

Qt 基于 C++ 的面向对象特性,可快速封装跨平台接口,兼顾性能和开发效率。

四、总结

面向过程的核心是“函数驱动”,代码简洁易懂但扩展性差,适合简单任务。

面向对象的核心是“对象驱动”,通过封装、继承、多态思想实现,高复用,易扩展,适合复杂系统。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐