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

01 C++概述


一、C++语言发展史

  1. 起源与演进
    • 1960s:剑桥大学Martin Richards开发BCPL语言,用于系统软件开发。

    • 1970年:贝尔实验室Ken Thompson在BCPL基础上发明B语言。

    • 1972年:Dennis Ritchie和Brian Kernighan设计出C语言,兼具高级语言与汇编特性。

    • 1980年:贝尔实验室开始扩展C语言为“带类的C”(C with Classes)。

    • 1983年:正式命名为C++,支持面向对象编程。

    • 1994年:ANSI C++标准草案制定。

    • 1998年:推出ANSI/ISO C++标准(C++98),成为现代C++的基础。

  2. 意义
    • C++在C语言基础上引入面向对象机制,同时保留高效性、可移植性,成为系统级开发和复杂应用的主流语言。


二、C与C++的核心区别

  1. C语言特点
    • 优势:结构化编程、高效灵活、可移植性强,适合系统程序和科学计算。

    • 缺陷:

    ◦ 类型检查较弱,安全性不足。

    ◦ 缺乏代码重用机制(如类、模板)。

    ◦ 难以支持大规模软件开发。

  2. C++的改进
    • 扩展C的功能:增强类型检查、引入引用、异常处理、模板等。

    • 面向对象特性:封装、继承、多态。

    • 泛型编程:通过模板(类模板、函数模板)实现代码通用性。

    • 兼容性:C是C++的子集,C++完全兼容C语法。


三、面向对象编程(OOP)思想

  1. 核心理念
    • 程序 = 对象 + 消息:以对象为中心,通过消息传递实现交互。

    • 对比面向过程:

    ◦ 面向过程:程序 = 数据 + 算法(按步骤分解任务)。

    ◦ 面向对象:通过对象的属性和行为模拟现实问题(如“冰箱”对象封装开门、关门等操作)。

  2. 三大核心特征
    • 封装、继承、多态。


四、封装(Encapsulation)

  1. 定义
    • 将数据(属性)和操作(方法)绑定为独立单元(类),隐藏内部细节,仅暴露接口。

  2. 作用
    • 提高安全性(如隐藏电路细节的录音机)。

    • 简化外部使用,增强模块化。


五、继承(Inheritance)

  1. 定义
    • 子类继承父类的属性和方法,实现代码重用和层次化设计。

    • 例:孩子类继承父母类的特征和行为。

  2. 意义
    • 减少冗余代码,支持增量开发,提升软件可维护性。


六、多态(Polymorphism)

  1. 定义
    • 同一操作在不同对象中具有不同实现方式,分为:

    ◦ 编译时多态:通过函数重载、运算符重载实现。

    ◦ 运行时多态:通过虚函数(Virtual Function)实现动态绑定。

  2. 示例
    • 函数重载:同名函数根据参数类型/数量执行不同操作。

    • 运算符重载:重新定义运算符行为(如+用于复数加法)。

    • 虚函数:基类指针调用派生类方法,实现接口统一。


七、C++的其他关键特性

  1. 异常处理
    • 通过try/catch机制管理运行时错误,增强程序健壮性。

  2. 模板(泛型编程)
    • 编写与数据类型无关的通用代码,如标准模板库(STL)。

  3. 命名空间
    • 避免命名冲突,逻辑分组代码(如std命名空间)。


八、总结
C++以C语言为基础,通过引入面向对象、泛型编程等机制,解决了C语言在大型项目中的局限性。其核心优势在于:
• 高效性:保留C语言的底层操作能力。

• 扩展性:通过封装、继承、多态支持复杂系统设计。

• 灵活性:模板和重载机制提升代码复用性。

• 标准化:ANSI/ISO标准确保跨平台兼容性。

C++广泛应用于操作系统、游戏引擎、嵌入式系统等领域,是现代软件工程的重要工具。

http://www.xdnf.cn/news/2606.html

相关文章:

  • MATLAB Coder代码生成(工业部署)——MATLAB技巧
  • 机器学习-入门-线性模型(2)
  • 线下零售数据采集:在精度与效率之间寻找平衡点
  • 在 Ubuntu 24.04 LTS 一台机子上同时部署Dify 1.3.1 和 RAGflow 0.18.0
  • 《数据结构之美--二叉树》
  • PCI/PXI 总线的可编程电阻卡
  • oracle 数据库查询指定用户下每个表占用空间的大小,倒序显示
  • Java垃圾收集器与内存分配策略深度解析
  • 再看 BBR 到 BBRv3 的公平性改进
  • Hadoop 单机模式(Standalone Mode)部署与 WordCount 测试
  • 深入解析 Babylon.js 中的 TransformNode.lookAt 方法
  • AI大模型应用之按照设计稿还原代码
  • 第36课 常用快捷操作——用“鼠标右键”退出当前命令
  • 计算机考研精炼 计网
  • 网络安全实战指南:从安全巡检到权限维持的应急响应与木马查杀全(命令查收表)
  • 基于YOLO的瓷砖缺陷检测系统设计与实现(附数据集+源码)
  • HarmonyOS NEXT 诗词元服务项目开发上架全流程实战(一、项目介绍及实现效果展示)
  • 使用TortoiseGit进行文件比较
  • 【3分钟准备前端面试】Hybrid开发 谷歌浏览器调试安卓app
  • 【优选算法-二分查找】二分查找算法解析:如何通过二段性优化搜索效率
  • 终端下PgSQL与MySQL常用命令
  • Sql刷题日志(day6)
  • 从视频中学习:从Humanoid-X、UH-1的自动打字幕,到首个人形VLA Humanoid-VLA(自监督数据增强且整合第一人称视角)
  • Vue响应式数据详解
  • 微调灾情分析报告生成模型
  • Golang 学习指南
  • 2025 FIC wp
  • 每日定投40刀BTC(15)20250420 - 20250427
  • 基于esp32实现键值对存储读写c程序例程
  • 码蹄集——输入、输出格式题