分类: C++程序设计语言

25 篇文章

16. 类
类基础 类的简要概括: 一个类就是一个用户自定义类型。 一个类由一组成员构成,最常见的成员类别是数据成员和成员函数。 成员函数可以定义初始化(创建)、拷贝、移动和清理(析构)等语义。 对对象使用 .​(点)访问成员,对指针使用 ->​(箭头)访问成员。 可以为类定义运算符,如 +​、! ​和 &​。 一个类就是一个包含其成员的名字空间…
15. 源文件与程序
分离编译 分离编译是一种将程序分解为多个逻辑上独立的部分(如模块或文件)的方法,这样做可以更好地管理程序的组成部分。在 C++ 中,每个源代码文件通常包含一个或多个逻辑组件,而物理结构则是这些逻辑组件在文件系统中的组织方式。 当源文件提交给编译器后,首先进行预处理,处理宏和包含头文件。预处理的结果是编译单元(translation unit),这是…
14. 名字空间
C++ 通过函数、类和名字空间等语言特性的组合以及源码的组织来实现模块化。 名字空间 名字空间(namespace)是 C++ 中用于组织代码和避免名字冲突的一种机制。它允许将一组相关的特性(如类、函数等)封装在一个命名的作用域内。名字空间的成员可以直接相互访问,而从外部访问它们则需要显式指定名字空间。 名字空间形成了一个具名的作用域。在名字空间内…
13. 异常处理
错误处理 异常处理是程序设计中用于处理错误的关键机制,它允许程序在遇到错误时,将错误信息从检测点传递到处理点。异常处理主要依赖于两个核心概念:异常安全保障和资源获取即初始化(RAII)。异常安全保障确保程序能够从运行时错误中快速恢复,而 RAII 技术则通过构造函数和析构函数管理资源,确保资源的正确分配和释放。 异常 异常是一个被程序抛出的对象,代…
12. 函数
函数声明 函数声明是告诉编译器函数的存在及其特性的过程。它包括函数的名称、返回值类型(如果有的话)以及参数的数量和类型。函数声明使得在程序的其他部分可以调用该函数,即使函数的定义在声明之后。 在函数声明中包含参数名称有助于理解函数的含义,但这些名称在声明中对编译器来说是可选的,除非声明同时也是函数的定义。 当函数声明的返回类型为 void ​时,表…
11. 选择适当的操作
自由存储 单个对象的分配和释放 int* ptr = new int; // 分配一个int类型的内存空间,并初始化为0 *ptr = 10; // 赋值 delete ptr; // 释放内存 数组的分配和释放 int* arr = new int[10]; // 分配一个int类型数组,包含10个元素 for (int i = 0; i <…
10. 表达式
‍ 桌面计算器程序 我们的桌面计算器程序提供了四种标准算术操作,它们以中缀运算符的形式出现,可以作用于浮点数。此外,用户还可以定义变量。例如,给定输入: r=2.5 area=pi*r*r (预先定义了 pi)计算器程序将会输出: 2.5 19.635 其中,2.5 ​是第一行输入的结果,19.635 ​是第二行的结果。 计算器包含四个部分:分析器…
09. 语句
语句概述 这里是 C++ 语句的形式化定义: 语句: 声明 表达式可选; { 语句列表可选 } try { 语句列表可选 } 处理模块列表 case 常量表达式 : 语句 default : 语句 break; continue; return 表达式可选; goto 标识符; 标识符 : 语句 选择语句 循环语句 选择语句: if( 条件 ) 语…
08. 结构、联合与枚举
引言 ​struct​(结构)是由任意类型元素(即成员,member​)构成的序列。 ​union ​是一种 struct​,同一时刻只保存一个元素的值。 ​enum​(枚举)是包含一组命名常量(称为枚举值)的类型。 ​enum class​(限定作用域的枚举类型)是一种 enum​,枚举值位于枚举类型的作用域内,不存在向其他类型的隐式类型转换。 …
07. 指针、数组与引用
指针 ​void*​ 不允许加减,因为不知道指向对象的大小。 指针的数值运算(+​、-​、++​、--​),依赖于所指定的对象。 指针之间的减法只有指向同一数组的元素才有效,当计算两个指针 p​ 和 q​ 的差值(q - p​)时,所得结果是序列 [p:q)​ 中的元素数量(一个整数): #include <iostream> #inc…