C++——从C到C++

一、核心区别与联系

1. 编程范式

  • C:纯过程式语言,核心是函数和结构体,通过函数调用操作数据。
  • C++ :多范式语言,支持:
    • 过程式(与C兼容)
    • 面向对象(类、继承、多态)
    • 泛型编程(模板)
    • 元编程(编译期计算)
    • 函数式(lambda表达式)

2. 类型系统

  • C
    • 弱类型检查(隐式转换普遍)
    • 无函数重载、运算符重载
    • 结构体不能包含函数
  • C++
    • 强类型检查(需显式转换)
    • 支持函数重载(通过签名区分)
    • 运算符重载(如operator+
    • 类可包含成员函数和静态函数

3. 内存管理

  • 相同点 :都使用malloc/freenew/delete(C++特有)
  • C++增强
    • RAII机制(资源获取即初始化)
    • 智能指针(unique_ptr, shared_ptr
    • 析构函数自动调用
    • 容器类(vector, map)管理内存

4. 标准库

  • C
    • 核心库:stdio.h, stdlib.h, string.h
    • 功能:基础I/O、内存管理、字符串操作
  • C++
    • C标准库子集(cstdio, cstdlib等)
    • STL(标准模板库):
      • 容器(vector, list, map
      • 算法(sort, find
      • 迭代器
      • 函数对象
    • 新增流库(iostream替代stdio.h

5. 编译与执行

  • C
    • 单次编译:源文件 → 目标文件 → 可执行文件
  • C++
    • 支持模板实例化(编译期生成代码)
    • 名称修饰(name mangling)支持函数重载
    • 链接时优化(LTO)更复杂

二、具体特性对比

1. 函数相关

特性 C C++
函数重载 不支持 支持
默认参数 不支持 支持
内联函数 通过宏实现 真正的inline关键字
函数模板 支持
异常处理 setjmp/longjmp try/catch/throw

2. 面向对象特性

特性 C(模拟) C++(原生)
封装 结构体+函数指针 class/struct/access specifiers
继承 手动模拟 直接语法支持
多态 函数指针数组 虚函数表
抽象 无直接支持 纯虚函数/抽象类

3. 标准库差异

领域 C C++
I/O stdio.h (printf/scanf) iostream (cout/cin)
字符串 char[] + string.h std::string类
容器 STL容器(vector,map等)
算法 需手动实现 STL算法(sort,find等)
多线程 pthread等库 std::thread(C++11起)

三、从C到C++的学习路径

1. 基础过渡阶段

  1. C风格代码的C++写法

    • cout/cin替代printf/scanf

    • std::string替代C字符串

    • vector替代动态数组

  2. 理解引用与指针的区别

cpp 复制代码
void swap(int &a, int &b) { // C++引用
    int temp = a;
    a = b;
    b = temp;
}

void swap(int *a, int *b) { // C指针
    int temp = *a;
    *a = *b;
    *b = temp;
}

2. 面向对象编程学习

2. 面向对象编程学习

  • 类与对象基础

    cpp 复制代码
    class Rectangle {
    private:
        int width, height;
    public:
        Rectangle(int w, int h) : width(w), height(h) {}
        int area() { return width * height; }
    };
  • 三大特性深入

    • 封装:访问控制(public/private/protected)

    • 继承:单继承、多继承、虚继承

    • 多态:虚函数、override、final

3. 高级特性掌握

  1. 模板编程

    cpp 复制代码
    template <typename T>
    T max(T a, T b) {
        return a > b ? a : b;
    }
  2. 现代C++特性(C++11/14/17/20)

    • 智能指针

    • Lambda表达式

    • 移动语义

    • 并发支持