当前位置: 首页 > news >正文

C++——从C到C++

一、核心区别与联系

1. 编程范式

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

2. 类型系统

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

3. 内存管理

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

4. 标准库

  • C
    • 核心库:stdio.hstdlib.hstring.h
    • 功能:基础I/O、内存管理、字符串操作
  • C++
    • C标准库子集(cstdiocstdlib等)
    • STL(标准模板库):
      • 容器(vectorlistmap
      • 算法(sortfind
      • 迭代器
      • 函数对象
    • 新增流库(iostream替代stdio.h

5. 编译与执行

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

二、具体特性对比

1. 函数相关

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

2. 面向对象特性

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

3. 标准库差异

领域CC++
I/Ostdio.h (printf/scanf)iostream (cout/cin)
字符串char[] + string.hstd::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. 理解引用与指针的区别

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. 面向对象编程学习

  1. 2. 面向对象编程学习

    • 类与对象基础

      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. 模板编程

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

    • 智能指针

    • Lambda表达式

    • 移动语义

    • 并发支持

http://www.dtcms.com/a/269880.html

相关文章:

  • Mybatis-plus 中 LambdaQueryWrapper和QueryWrapper 区别对比,及完整示例演示
  • 大型语言模型(LLM)的最新研究进展及相关新信息技术
  • 如何在 Android Framework层面控制高通(Qualcomm)芯片的 CPU 和 GPU。
  • 在Docker中安装nexus3(作为maven私服)
  • 使用Node.js搭建Web应用有哪些注意事项?
  • 中韩SD-WAN网络加速专线:提升国内与韩国公司网络性能的关键
  • 四十四、NoSQL、Redis
  • Docker、Git与虚拟机:技术原理与深度对比(更新版)
  • 【网络安全】恶意 Python 包“psslib”仿冒 passlib,可导致 Windows 系统关闭
  • 【王树森推荐系统】召回12:曝光过滤 Bloom Filter
  • Java面试基础:概念
  • FairyGUI 实现 Boss 双层血条动画
  • 3D 演示动画在汽车培训与教育领域中的应用
  • 从0开始学习R语言--Day41--Moran‘s I
  • 城乡社区服务体系建设-城乡商城:意义深远与前景广阔——仙盟创梦IDE
  • 把文件夹下所有的excle写入word文件中
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | StickyNavbar(粘性导航栏)
  • Qwen视觉模型本地化部署,实现识别图片:Qwen2___5-VL-7B-Instruct
  • 分布式光纤传感:为储能安全保驾护航
  • 2025年7月:打cs1.5 600元装机台式电脑方案A
  • 学习软件测试的第十二天(接口测试)
  • Spring Security架构与实战全解析
  • 人工智能-基础篇-24-RAG和LLM到底怎么理解和区分?(LLM是深度训练的大语言生成模型,RAG是LLM更智能的补充技术)
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(1):新的开始-尊他开始
  • 【无标题】导出pdf
  • 数据库版本自动管理
  • MVP架构接口开发套路
  • TCP/IP协议基础
  • mybatis/mybatis-plus添加数据,自增id的值为负数
  • 第十四天,7月8日,八股