C++ 存储类
C++ 存储类存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类: auto:这是默认的存储类说明符,通常可以省略不写。auto 指定的变量具有自动存储期,即它们的生命周期仅限于定义它们的块(block)。auto 变量通常在栈上分配。register:用于建议编译器将变量存储在CPU寄存器中以提高访问速度。在 C++11 及以后的版本中,register 已经是一个废弃的特性,不再具有实际作用。static:用于定义具有静态存储期的变量或函数,它们的生命周期贯穿整个程序的运行期。在函数内部,static变量的值在函数调用之间保持不变。在文件内部或全局作用域,static变量具有内部链接,只能在定义它们的文件中访问。extern:用于声明具有外部链接的变量或函数,它们可以在多个文件之间共享。默认情况下,全局变量和函数具有 extern 存储类。在一个文件中使用extern声明另一个文件中定义的全局变量或函数,可以实现跨文件共享。mutable...
C++ 字符串
C++ 字符串 C++ 提供了以下两种类型的字符串表示形式: C 风格字符串C++ 引入的 string 类类型 C 风格字符串C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用 null 字符 \0 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。下面的声明和初始化创建了一个 RUNOOB 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 RUNOOB 的字符数多一个。 char site[7] = {‘R’, ‘U’, ‘N’, ‘O’, ‘O’, ‘B’, ‘\0’}; 依据数组初始化规则,您可以把上面的语句写成以下语句: char site[] = “RUNOOB”; 以下是 C/C++ 中定义的字符串的内存表示: 其实,您不需要把 null 字符放在字符串常量的末尾。C++ 编译器会在初始化数组时,自动把 \0 放在字符串的末尾。让我们尝试输出上面的字符串: 实例 #include using namespace std; int main (){char...
C++ 多线程库 <thread>
C++ 多线程库 C++11 引入了多线程支持,通过 库,开发者可以轻松地在程序中实现并行处理。本文将将介绍 库的基本概念、定义、语法以及如何使用它来创建和管理线程。线程是程序执行的最小单元,是操作系统能够进行运算调度的最小单位。在多线程程序中,多个线程可以并行执行,提高程序的执行效率。C++ 库概述 库是 C++ 标准库的一部分,提供了创建和管理线程的基本功能,它包括以下几个关键组件: std::thread:表示一个线程,可以创建、启动、等待和销毁线程。std::this_thread:提供了一些静态成员函数,用于操作当前线程。std::thread::id:线程的唯一标识符。 创建线程要创建一个线程,你需要实例化 std::thread 类,并传递一个可调用对象(函数、lambda 表达式或对象的成员函数)作为参数。实例#include #include void print_id(int id) { std::cout << “ID: “ << id << “, Thread ID: “ <<...
C++ 多线程
C++ 多线程线程是程序中的轻量级执行单元,允许程序同时执行多个任务。多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。 基于进程的多任务处理是程序的并发执行。基于线程的多任务处理是同一程序的片段的并发执行。C++ 多线程编程涉及在一个程序中创建和管理多个并发执行的线程。C++ 提供了强大的多线程支持,特别是在 C++11 标准及其之后,通过 标准库使得多线程编程变得更加简单和安全。概念说明线程 (Thread)线程是程序执行中的单一顺序控制流,多个线程可以在同一个进程中独立运行。线程共享进程的地址空间、文件描述符、堆和全局变量等资源,但每个线程有自己的栈、寄存器和程序计数器。并发 (Concurrency) 与并行 (Parallelism)并发:多个任务在时间片段内交替执行,表现出同时进行的效果。并行:多个任务在多个处理器或处理器核上同时执行。C++11...
C++ 多态
C++ 多态多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。在 C++ 中,多态(Polymorphism)是面向对象编程的重要特性之一。 C++ 多态允许使用基类指针或引用来调用子类的重写方法,从而使得同一接口可以表现不同的行为。多态使得代码更加灵活和通用,程序可以通过基类指针或引用来操作不同类型的对象,而不需要显式区分对象类型。这样可以使代码更具扩展性,在增加新的形状类时不需要修改主程序。以下是多态的几个关键点:虚函数(Virtual Functions): 在基类中声明一个函数为虚函数,使用关键字virtual。派生类可以重写(override)这个虚函数。调用虚函数时,会根据对象的实际类型来决定调用哪个版本的函数。 动态绑定(Dynamic Binding): 也称为晚期绑定(Late Binding),在运行时确定函数调用的具体实现。需要使用指向基类的指针或引用来调用虚函数,编译器在运行时根据对象的实际类型来决定调用哪个函数。 纯虚函数(Pure Virtual...
C++ 基本语法
C++ 基本语法 C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。类 - 类可以定义为描述对象行为/状态的模板/蓝图。方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。即时变量 - 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。 C++ 程序结构让我们看一段简单的代码,可以输出单词 Hello World。 实例 #include using namespace std; // main() 是程序开始执行的地方int main(){cout << “Hello World”; // 输出 Hello Worldreturn 0;} 接下来我们讲解一下上面这段程序: C++...
C++ 基本的输入输出
C++ 基本的输入输出 C++ 标准库提供了一组丰富的输入/输出功能,我们将在后续的章节进行介绍。本章将讨论 C++ 编程中最基本和最常见的 I/O 操作。C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。 I/O 库头文件下列的头文件在 C++ 编程中很重要。 头文件函数和描述该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。该文件通过所谓的参数化的流操纵器(比如 setw 和 setprecision),来声明对执行标准化 I/O 有用的服务。该文件为用户控制的文件处理声明服务。我们将在文件和流的相关章节讨论它的细节。 标准输出流(cout)预定义的对象 cout 是 iostream 类的一个实例。cout 对象”连接”到标准输出设备,通常是显示屏。cout 是与流插入运算符...
C++ 命名空间
C++ 命名空间假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。同样的情况也出现在 C++ 应用程序中。例如,您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。 定义命名空间命名空间的定义使用关键字 namespace,后跟命名空间的名称,如下所示: namespace namespace_name {// 代码声明} 为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称,如下所示: name::code; ...
C++ 变量类型
C++ 变量类型变量其实只不过是程序可操作的存储区的名称。在 C++ 中,有多种变量类型可用于存储不同种类的数据。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。基于前一章讲解的基本类型,有以下几种基本的变量类型,将在下一章中进行讲解: 类型描述bool布尔类型,存储值 true 或 false,占用 1 个字节。char字符类型,用于存储 ASCII 字符,通常占用 1 个字节。int整数类型,通常用于存储普通整数,通常占用 4 个字节。float单精度浮点值,用于存储单精度浮点数。单精度是这样的格式,1 位符号,8 位指数,23 位小数,通常占用4个字节。 double双精度浮点值,用于存储双精度浮点数。双精度是 1 位符号,11 位指数,52 位小数,通常占用 8 个字节。 void表示类型的缺失。wchar_t宽字符类型,用于存储更大范围的字符,通常占用 2 个或 4...
C++ 变量作用域
C++...