|
|
第1行: |
第1行: |
| = C++语言 =
| |
|
| |
|
| C++是一种功能强大的通用编程语言,由比雅尼·斯特劳斯特鲁普(Bjarne Stroustrup)于1979年开始设计和开发,最初称为"带类的C"(C with Classes),后于1983年更名为C++。
| |
| [[文件:C++ Logo.png|缩略图|C++ Logo]]
| |
|
| |
| == 概述 ==
| |
|
| |
| C++是一种静态类型的、编译型、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程、泛型编程和函数式编程等多种编程范式。C++的设计目标是在C语言的基础上提供对象、类、继承等面向对象特性,同时保持C语言的高效性和硬件控制能力。
| |
|
| |
| === 语言特点 ===
| |
|
| |
| * '''高效性''': C++程序可以编译成高效的机器码,运行速度接近汇编语言编写的程序
| |
| * '''可移植性''': 在不同平台上编译的C++程序只需要很小的修改或不需修改
| |
| * '''面向对象''': 支持类、对象、继承、多态、封装等面向对象特性
| |
| * '''泛型编程''': 通过模板机制支持参数化类型,实现代码复用
| |
| * '''STL库''': 提供丰富的标准模板库,包括各种容器、算法和迭代器
| |
| * '''低级内存操作''': 允许直接访问硬件和内存,提供指针等低级操作
| |
| * '''兼容C''': 大部分C代码可以在C++中直接使用
| |
|
| |
| == 历史发展 ==
| |
|
| |
| === 主要版本 ===
| |
|
| |
| * '''C with Classes (1979)''': 最初版本,增加了类、继承等面向对象特性
| |
| * '''C++ 1.0 (1983)''': 正式更名为C++,增加了虚函数、运算符重载、引用等特性
| |
| * '''C++ 2.0 (1989)''': 增加了多重继承、抽象类等特性
| |
| * '''C++98 (1998)''': 第一个ISO标准版本,引入STL,异常处理等
| |
| * '''C++03 (2003)''': 对C++98的修订版本,修复了一些缺陷
| |
| * '''C++11 (2011)''': 重大更新,引入auto关键字、lambda表达式、智能指针、线程库等
| |
| * '''C++14 (2014)''': 对C++11的扩展,改进了lambda表达式,增加了二进制字面量等
| |
| * '''C++17 (2017)''': 增加了结构化绑定、if constexpr、std::optional等特性
| |
| * '''C++20 (2020)''': 引入了概念(concepts)、协程(coroutines)、模块(modules)等特性
| |
| * '''C++23 (2023)''': 正在开发中的最新标准
| |
|
| |
| == 编程范式 ==
| |
|
| |
| C++支持多种编程范式,使其成为一种非常灵活的语言:
| |
|
| |
| === 面向对象编程 ===
| |
|
| |
| C++提供了完整的面向对象编程支持:
| |
|
| |
| * '''类与对象''': 通过class和struct关键字定义类,实例化为对象
| |
| * '''继承''': 支持单继承、多重继承和虚继承
| |
| * '''多态''': 通过虚函数实现动态多态
| |
| * '''封装''': 通过访问修饰符(public, private, protected)实现信息隐藏
| |
|
| |
| <syntaxhighlight lang="cpp">
| |
| class Animal {
| |
| public:
| |
| virtual void makeSound() const = 0; // 纯虚函数
| |
| };
| |
|
| |
| class Cat : public Animal {
| |
| public:
| |
| void makeSound() const override {
| |
| std::cout << "喵喵喵" << std::endl;
| |
| }
| |
| };
| |
| </syntaxhighlight>
| |
|
| |
| === 泛型编程 ===
| |
|
| |
| C++通过模板机制实现泛型编程:
| |
|
| |
| * '''函数模板''': 创建可以处理不同类型参数的函数
| |
| * '''类模板''': 创建可以使用不同类型的类
| |
| * '''STL''': 标准模板库提供了泛型容器、算法和迭代器
| |
|
| |
| <syntaxhighlight lang="cpp">
| |
| template<typename T>
| |
| T max(T a, T b) {
| |
| return (a > b) ? a : b;
| |
| }
| |
| </syntaxhighlight>
| |
|
| |
| === 过程式编程 ===
| |
|
| |
| C++完全支持C语言的过程式编程特性:
| |
|
| |
| * '''函数''': 代码组织的基本单元
| |
| * '''顺序、选择、循环''': 基本控制结构
| |
| * '''指针和引用''': 直接内存操作
| |
|
| |
| === 函数式编程 ===
| |
|
| |
| C++11及以后版本增加了函数式编程的支持:
| |
|
| |
| * '''Lambda表达式''': 创建匿名函数
| |
| * '''std::function''': 函数对象包装器
| |
| * '''高阶函数''': 函数可以作为参数和返回值
| |
|
| |
| <syntaxhighlight lang="cpp">
| |
| auto add = [](int a, int b) { return a + b; };
| |
| std::cout << add(5, 3) << std::endl; // 输出:8
| |
| </syntaxhighlight>
| |
|
| |
| == 语言核心特性 ==
| |
|
| |
| === 内存管理 ===
| |
|
| |
| C++提供了多种内存管理机制:
| |
|
| |
| * '''栈内存''': 自动分配和释放的局部变量
| |
| * '''堆内存''': 使用new和delete手动分配和释放
| |
| * '''智能指针''': std::unique_ptr、std::shared_ptr等自动管理内存
| |
| * '''RAII原则''': "资源获取即初始化",通过对象生命周期管理资源
| |
|
| |
| === 异常处理 ===
| |
|
| |
| C++提供了完整的异常处理机制:
| |
|
| |
| * '''try-catch块''': 捕获和处理异常
| |
| * '''throw语句''': 抛出异常
| |
| * '''异常规范''': 声明函数可能抛出的异常类型
| |
| * '''标准异常层次''': std::exception及其派生类
| |
|
| |
| === 运算符重载 ===
| |
|
| |
| C++允许为自定义类型定义操作符的行为:
| |
|
| |
| * '''一元运算符''': +, -, !, ~等
| |
| * '''二元运算符''': +, -, *, /, %, &, |, ^等
| |
| * '''关系运算符''': ==, !=, <, >, <=, >=等
| |
| * '''赋值运算符''': =, +=, -=, *=等
| |
| * '''函数调用运算符''': operator()
| |
| * '''下标运算符''': operator[]
| |
| * '''智能指针运算符''': operator->, operator*
| |
|
| |
| === 名称空间 ===
| |
|
| |
| C++使用namespace机制组织代码并避免名称冲突:
| |
|
| |
| <syntaxhighlight lang="cpp">
| |
| namespace Math {
| |
| double PI = 3.14159265358979;
| |
| double square(double x) {
| |
| return x * x;
| |
| }
| |
| }
| |
|
| |
| // 使用
| |
| double area = Math::PI * Math::square(radius);
| |
| </syntaxhighlight>
| |
|
| |
| == 标准库 ==
| |
|
| |
| C++标准库提供了丰富的功能:
| |
|
| |
| === 标准模板库(STL) ===
| |
|
| |
| * '''容器''': vector, list, map, set, queue, stack等
| |
| * '''算法''': sort, find, transform, accumulate等
| |
| * '''迭代器''': 统一访问容器元素的接口
| |
| * '''函数对象''': 可作为算法参数的函数封装
| |
|
| |
| === 输入输出库 ===
| |
|
| |
| * '''iostream''': cin, cout, cerr, clog等
| |
| * '''fstream''': 文件输入输出
| |
| * '''stringstream''': 字符串流处理
| |
|
| |
| === 其他标准库 ===
| |
|
| |
| * '''字符串处理''': std::string, std::string_view
| |
| * '''数值计算''': <numeric>, <cmath>
| |
| * '''时间处理''': <chrono>
| |
| * '''线程支持''': <thread>, <mutex>, <future>
| |
| * '''正则表达式''': <regex>
| |
| * '''随机数''': <random>
| |
| * '''智能指针''': <memory>
| |
| * '''文件系统''': <filesystem> (C++17)
| |
|
| |
| == 应用领域 ==
| |
|
| |
| C++广泛应用于各种领域:
| |
|
| |
| * '''系统软件''': 操作系统、编译器、数据库
| |
| * '''游戏开发''': 游戏引擎、3D图形处理
| |
| * '''嵌入式系统''': 实时控制、低级硬件交互
| |
| * '''高性能计算''': 科学计算、物理模拟
| |
| * '''金融应用''': 高频交易、风险分析
| |
| * '''图形用户界面''': 使用Qt、wxWidgets等框架
| |
| * '''网络编程''': 服务器应用、网络协议实现
| |
| * '''人工智能''': 机器学习库、深度学习框架
| |
|
| |
| == 编译环境 ==
| |
|
| |
| === 主要编译器 ===
| |
|
| |
| * '''GCC/G++''': 开源编译器,支持多平台
| |
| * '''MSVC''': Microsoft Visual C++编译器
| |
| * '''Clang''': LLVM项目的C/C++前端
| |
| * '''Intel C++ Compiler''': 优化用于Intel处理器
| |
|
| |
| === 构建工具 ===
| |
|
| |
| * '''Make''': 传统的构建自动化工具
| |
| * '''CMake''': 跨平台构建系统生成器
| |
| * '''Ninja''': 注重速度的构建系统
| |
| * '''Visual Studio''': 集成开发环境和构建系统
| |
| * '''Bazel''': Google的构建工具
| |
|
| |
| == 学习资源 ==
| |
|
| |
| === 经典书籍 ===
| |
|
| |
| * '''《C++程序设计语言》''' - Bjarne Stroustrup(作者)
| |
| * '''《C++ Primer》''' - Stanley B. Lippman, Josée Lajoie, Barbara E. Moo
| |
| * '''《Effective C++》''' - Scott Meyers
| |
| * '''《STL源码剖析》''' - 侯捷
| |
| * '''《深度探索C++对象模型》''' - Stanley B. Lippman
| |
|
| |
| === 在线资源 ===
| |
|
| |
| * '''cppreference.com''': 全面的C++参考
| |
| * '''cplusplus.com''': 教程和参考
| |
| * '''ISO C++官方网站''': isocpp.org
| |
| * '''C++标准草案''': 最新标准的工作版本
| |
|
| |
| == 参见 ==
| |
|
| |
| * [[C语言]]
| |
| * [[面向对象编程]]
| |
| * [[泛型编程]]
| |
| * [[标准模板库]]
| |
| * [[计算机程序设计语言]]
| |
|
| |
| [[Category:编程语言]]
| |
| [[Category:面向对象编程]]
| |
| [[Category:系统编程语言]]
| |