深耕进阶 Day1:C 与 C++ 核心差异 + C++ 入门基石

一、前言

前面我们完成了 C 语言版数据结构 + 算法 全覆盖,基础已经扎实。接下来开启深耕阶段 :以 C++ 为核心,打通:语法深度、面向对象、内存模型、STL 底层、高阶数据结构、工程级代码思维。

本篇作为进阶第一篇,先搞懂:为什么有 C 还要用 C++?二者核心区别在哪?


二、C 语言的局限性

  1. 面向过程:以「函数 + 结构体」组织代码,大型项目耦合极高
  2. 无权限控制:结构体成员全部公开,无法封装保护数据
  3. 无函数重载:同名函数不能存在,代码冗余
  4. 无引用:只能靠指针传参,写法繁琐、易空指针崩溃
  5. 无泛型:不同类型容器需要重复写多套代码
  6. 内存管理原始malloc/free 不自动初始化、不自动释放

三、C++ 核心优势(对标 C)

  1. 面向对象:封装、继承、多态,适合大型工程
  2. 语法增强:引用、重载、默认参数、const 严格限定
  3. 内存更安全new/delete 对比 malloc/free
  4. STL 标准库:现成容器 + 算法,不用手写链表 / 哈希 / 排序
  5. 兼容 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 默认 公有 public
  • class 默认 私有 private

五、C++ 三大核心特性(全程重点)

  1. 封装将数据与操作数据的函数绑定,隐藏内部细节,暴露安全接口。
  2. 继承在原有类基础上扩展新功能,代码复用。
  3. 多态一个接口,多种实现,大幅提升代码扩展性。

后续每日逐一深挖底层原理 + 手写代码。


六、C++ 命名空间 namespace 作用

C 语言全局变量容易命名冲突。C++ 使用 namespace 隔离作用域:

复制代码
#include <iostream>

namespace MyCode
{
    int num = 10;
}

int main()
{
    cout << MyCode::num << endl;
    return 0;
}

日常简写:

复制代码
using namespace std;

七、今日必背小结

  1. C 面向过程,C++ 面向对象,兼容 C。
  2. 核心升级:引用、重载、封装、继承、多态、STL、new/delete。
  3. C++ struct 支持权限控制,是类的一种。
  4. cin/coutnew/delete 是入门最常用差异点。

八、课后练习

  1. 分别用 C、C++ 写代码,实现整数输入与输出。
  2. 手动区分 malloc/freenew/delete 写法区别。

明日预告「深耕进阶 Day2」

C++ 类与对象完整精讲:构造函数、析构函数、拷贝构造、成员变量初始化。

需要我直接继续更新 进阶 Day2 吗?

相关推荐
Chester_19997 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
EXI-小洲8 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员9 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导9 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan9 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子9 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化9 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_695251499 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
是隼人9 小时前
buuctf-pwn xdctf2015_pwn200题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
大衛說10 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习