C语言与C++在基础语法上的区别

📅 2026/8/6 4:41:15
C语言与C++在基础语法上的区别
C 再上手 C总觉得只是多了类、继承、虚函数这些语法照着写却总写不出 “地道” 的 C代码甚至还在用 C 的思路写 C 程序 —— 这不是语法没学透而是没搞懂两者编程思想的核心差异01 编程思想一句话C语言是面向过程的“执行者”C是面向对象的“设计者”。所谓面向过程以“函数/过程”为核心函数驱动按照函数调用顺序执行按步骤实现功能。该思想关注的是“怎么做”。所谓面向对象以“对象”为核心对象驱动将不同的方法封装在在不同的类中根据具体目的来调用相应的对象去实现。该思想关注的是“谁来做”。我们来看一个通俗的例子做一道菜1面向过程思想按步骤执行 1.买菜 - 2.洗菜 - 3.切菜 - 4. 炒菜 - 5.装盘。2面向对象思想对象是 厨师负责 炒菜帮厨负责 买菜、洗菜、切菜、装盘等食材包括 白菜、猪肉、鱼肉炒锅煮菜工具。这些对象各司其职而非按步骤顺序进行。大家是不是有直观的体会了02 代码比较理解了编程思想我们从代码层面进行解读。这里以学生成绩管理功能为例1C语言面向过程#include iostream#include stringusing 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;}从上述C代码中可以看出数据与操作数据的函数相互隔离顺序执行数据Student结构体与操作数据的函数calculateTotalScore/printStudentInfo分离主函数按“数据定义 -函数调用”的步骤顺序执行核心是过程化若需要扩展功能如修改成绩需新增函数维护成本较高。2C面向对象#include iostream#include stringusing 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;}从上述C代码中可以看出将数据与行为封装为一个类绑定在一起数据name、score、id私有化避免被外部非法纂改数据与行为计算、打印成绩等绑定在一个类中封装化新增功能只需在类内新增方法不影响外部代码。03 不同适用场景1C语言面向过程编程适用于嵌入式开发、底层库开发、操作系统内核开发等。场景典型案例理由嵌入式开发单片机程序、设备固件1. 对内存占用、运行效率要求极致2. 直接操作寄存器、硬件接口C 语法更简洁无额外开销3. 嵌入式编译器对 C 的支持更完善操作系统 内核开发Linux 内核、驱动程序1. 内核层需要极致的性能和可控性C 的虚函数、异常等会引入不可控的开销2. 内核代码追求简洁、可调试C 的过程式风格更易维护。高性能底层库基础算法库、网络协议栈1. 库需要被多语言调用C 的 ABI应用二进制接口更稳定2. 无额外封装开销调用效率最高。2C面向对象编程适用于大型工程、需模块化的复杂系统、跨平台开发。场景典型案例理由大型工程 复杂系统开发游戏引擎、智能驾驶1. 面向对象特性封装 / 继承 / 多态降低复杂系统的耦合度便于团队协作和维护2. STL 提供丰富的容器vector/map和算法提升开发效率。高性能应用开发图形渲染OpenGL/DirectX、高频交易系统1. 保留 C 的高性能同时用 OOP / 泛型编程简化代码2. 支持运算符重载、模板等特性适合编写高效且易读的算法。跨平台应用开发Qt 框架开发的桌面软件、跨平台工具Qt 基于 C 的面向对象特性可快速封装跨平台接口兼顾性能和开发效率。