一、前言
前面我们完成了 C 语言版数据结构 + 算法 全覆盖,基础已经扎实。接下来开启深耕阶段 :以 C++ 为核心,打通:语法深度、面向对象、内存模型、STL 底层、高阶数据结构、工程级代码思维。
本篇作为进阶第一篇,先搞懂:为什么有 C 还要用 C++?二者核心区别在哪?
二、C 语言的局限性
- 面向过程:以「函数 + 结构体」组织代码,大型项目耦合极高
- 无权限控制:结构体成员全部公开,无法封装保护数据
- 无函数重载:同名函数不能存在,代码冗余
- 无引用:只能靠指针传参,写法繁琐、易空指针崩溃
- 无泛型:不同类型容器需要重复写多套代码
- 内存管理原始 :
malloc/free不自动初始化、不自动释放
三、C++ 核心优势(对标 C)
- 面向对象:封装、继承、多态,适合大型工程
- 语法增强:引用、重载、默认参数、const 严格限定
- 内存更安全 :
new/delete对比malloc/free - STL 标准库:现成容器 + 算法,不用手写链表 / 哈希 / 排序
- 兼容 C:C 语言代码可以直接在 C++ 编译器运行
四、最直观:语法差异代码对比
1. 输入输出对比
C 语言
#include <stdio.h>
int main()
{
int a;
scanf("%d", &a);
printf("%d\n", a);
return 0;
}
C++ 语言
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
cout << a << endl;
return 0;
}
- 无需格式控制符
- 自动类型推导,不易出错
2. 动态内存对比
C 语言
// 需要强转、不调用构造、无析构
int* p = (int*)malloc(sizeof(int));
free(p);
C++
c
// 自动计算大小、支持构造析构
int* p = new int;
delete p;
3. 结构体权限差异
C 结构体
struct Student
{
int id;
char name[20];
};
// 所有成员全部公有,外部可随意修改
C++ 结构体 = 类
struct Student
{
private:
int id; // 私有成员,外部无法直接访问
public:
void setId(int x)
{
id = x;
}
};
C++ 默认:
struct默认 公有 publicclass默认 私有 private
五、C++ 三大核心特性(全程重点)
- 封装将数据与操作数据的函数绑定,隐藏内部细节,暴露安全接口。
- 继承在原有类基础上扩展新功能,代码复用。
- 多态一个接口,多种实现,大幅提升代码扩展性。
后续每日逐一深挖底层原理 + 手写代码。
六、C++ 命名空间 namespace 作用
C 语言全局变量容易命名冲突。C++ 使用 namespace 隔离作用域:
#include <iostream>
namespace MyCode
{
int num = 10;
}
int main()
{
cout << MyCode::num << endl;
return 0;
}
日常简写:
using namespace std;
七、今日必背小结
- C 面向过程,C++ 面向对象,兼容 C。
- 核心升级:引用、重载、封装、继承、多态、STL、new/delete。
- C++ struct 支持权限控制,是类的一种。
cin/cout、new/delete是入门最常用差异点。
八、课后练习
- 分别用 C、C++ 写代码,实现整数输入与输出。
- 手动区分
malloc/free与new/delete写法区别。
明日预告「深耕进阶 Day2」
C++ 类与对象完整精讲:构造函数、析构函数、拷贝构造、成员变量初始化。
需要我直接继续更新 进阶 Day2 吗?