
C++学习
文章平均质量分 81
joker-wt
这个作者很懒,什么都没留下…
展开
-
C++高级教程——C++ Web 编程
公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的。CGI 规范目前是由 NCSA 维护的,NCSA 定义 CGI 如下:公共网关接口(CGI),是一种用于外部网关程序与信息服务器(如 HTTP 服务器)对接的接口标准。目前的版本是 CGI/1.1,CGI/1.2 版本正在推进中。原创 2023-02-05 15:23:48 · 2018 阅读 · 2 评论 -
C++高级教程——C++多线程
当创建一个线程时,它的某个属性会定义它是否是可连接的(joinable)或可分离的(detached)。以下简单的实例代码使用 pthread_create() 函数创建了 5 个线程,并接收传入的参数。如果 main() 是在它所创建的线程之前结束,并通过 pthread_exit() 退出,那么其他线程将继续执行。在这里,pthread_create 创建一个新的线程,并让它可执行。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。基于线程的多任务处理的是同一程序的片段的并发执行。原创 2023-02-05 14:48:52 · 756 阅读 · 0 评论 -
C++高级教程——C++ 信号处理
在这里,sig 是要发送的信号的编号,这些信号包括:SIGINT、SIGABRT、SIGFPE、SIGILL、SIGSEGV、SIGTERM、SIGHUP。让我们编写一个简单的 C++ 程序,使用 signal() 函数捕获 SIGINT 信号。不管您想在程序中捕获什么信号,您都必须使用 signal 函数来注册信号,并将其与信号处理程序相关联。有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这个函数接收两个参数:第一个参数是一个整数,代表了信号的编号;原创 2023-02-05 14:32:48 · 727 阅读 · 0 评论 -
C++高级教程——C++ 预处理器
宏描述LINE这会在程序编译时包含当前行号。FILE这会在程序编译时包含当前文件名。DATE这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。TIME这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。return 0;原创 2023-02-04 15:55:17 · 961 阅读 · 0 评论 -
C++高级教程——C++ 模板
在这里,type 是占位符类型名称,可以在类被实例化的时候进行指定。每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 vector 或 vector。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。在这里,type 是函数所使用的数据类型的占位符名称。正如我们定义函数模板一样,我们也可以定义类模板。模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。您可以使用模板来定义函数和类,接下来让我们一起来看看如何使用。原创 2023-02-04 15:38:43 · 1932 阅读 · 0 评论 -
C++高级教程——C++ 命名空间
/ 代码声明name::code;// code 可以是变量或函数// 第一个命名空间// 第二个命名空间// 调用第一个命名空间中的函数// 调用第二个命名空间中的函数return 0;原创 2023-02-04 15:36:37 · 627 阅读 · 0 评论 -
C++高级教程——C++ 动态内存
在这里,data-type 可以是包括数组在内的任意内置的数据类型,也可以是包括类或结构在内的用户自定义的任何数据类型。new 与 malloc() 函数相比,其主要的优点是,new 不只是分配了内存,它还创建了对象。如果要为一个包含四个 Box 对象的数组分配内存,构造函数将被调用 4 次,同样地,当删除这些对象时,析构函数也将被调用相同的次数(4次)。在 C++ 中,您可以使用特殊的运算符为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址。// 释放 pvalue 所指向的内存。原创 2023-02-04 15:33:36 · 693 阅读 · 0 评论 -
C++高级教程——C++ 异常处理
您可以通过继承和重载 exception 类来定义新的异常。} };try {//其他的错误 } }在这里,what() 是异常类提供的一个公共方法,它已被所有子异常类重载。这将返回异常产生的原因。原创 2023-02-04 15:30:14 · 862 阅读 · 0 评论 -
C++高级教程——C++ 文件和流
到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。本教程介绍如何从文件读取流和向文件写入流。要在 C++ 中进行文件处理,必须在 C++ 源代码文件中包含头文件 和。原创 2023-02-04 15:24:32 · 2042 阅读 · 0 评论 -
C++面向对象——C++数据封装
私有成员 total 是对外隐藏的,用户不需要了解它,但它又是类能正常工作所必需的。为了使类中的成员变成公有的(即,程序中的其他部分也能访问),必须在这些成员前使用 public 关键字进行声明。封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。C++ 程序中,任何带有公有和私有成员的类都可以作为数据封装和数据抽象的实例。原创 2023-02-04 14:15:14 · 427 阅读 · 0 评论 -
C++面向对象——C++ 数据抽象
让我们举一个现实生活中的真实例子,比如一台电视机,您可以打开和关闭、切换频道、调整音量、添加外部组件(如喇叭、录像机、DVD 播放器),但是您不知道它的内部实现细节,也就是说,您并不知道它是如何通过缆线接收信号,如何转换信号,并最终显示在屏幕上。因此,我们可以说电视把它的内部实现和外部接口分离开了,您无需知道它的内部实现原理,直接通过它的外部接口(比如电源按钮、遥控器、声量控制器)就可以操控电视。数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。原创 2023-02-04 14:09:00 · 387 阅读 · 0 评论 -
C++面向对象——C++ 多态
导致错误输出的原因是,调用函数 area() 被编译器设置为基类中的版本,这就是所谓的静态多态,或静态链接 - 函数调用在程序执行前就准备好了。有了多态,您可以有多个不同的类,都带有同一个名称但具有不同实现的函数,函数的参数甚至可以是相同的。因此,由于 tri 和 rec 类的对象的地址存储在 *shape 中,所以会调用各自的 area() 函数。您可能想要在基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,但是您在基类中又不能对虚函数给出有意义的实现,这个时候就会用到纯虚函数。原创 2023-02-04 13:49:44 · 492 阅读 · 0 评论 -
C++面向对象——C++ 重载运算符和重载函数
就像加(+)运算符。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。当重载 () 时,您不是创造了一种新的调用函数的方式,相反地,这是创建一个可以传递任意数目参数的运算符函数。当重载 () 时,您不是创造了一种新的调用函数的方式,相反地,这是创建一个可以传递任意数目参数的运算符函数。原创 2023-02-04 13:44:03 · 932 阅读 · 0 评论 -
C++面向对象——C++继承
其中,访问修饰符 access 是 public、protected 或 private 其中的一个,用来修饰每个基类,各个基类之间用逗号分隔,如上所示。一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数。其中的一个,base-class 是之前定义过的某个类的名称。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。原创 2023-02-02 23:18:44 · 268 阅读 · 0 评论 -
C++面向对象——C++ 类 & 对象
定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。public :关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。您也可以指定类的成员为 private 或 protected,这个我们稍后会进行讲解。原创 2023-01-31 23:27:44 · 392 阅读 · 0 评论 -
C++基础——C++ 数据结构
为了定义结构,您必须使用 struct 语句。structure tag 是可选的,每个 member definition 是标准的变量定义,比如 int i;或者 float f;或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。} book;原创 2023-01-31 22:49:12 · 680 阅读 · 0 评论 -
C++基础——C++ 基本的输入输出
通过这些小实例,我们无法区分 cout、cerr 和 clog 的差异,但在编写和执行大型程序时,它们之间的差异就变得非常明显。所以良好的编程实践告诉我们,使用 cerr 流来显示错误消息,而其他的日志消息则使用 clog 流来输出。预定义的对象 clog 是 ostream 类的一个实例。cerr 对象附属到标准错误设备,通常也是显示屏,但是 cerr 对象是非缓冲的,且每个流插入到 cerr 都会立即输出。C++ 编译器根据要输入值的数据类型,选择合适的流提取运算符来提取值,并把它存储在给定的变量中。原创 2023-01-31 22:43:40 · 234 阅读 · 0 评论 -
C++基础——C++ 日期 & 时间
tm 结构在 C/C++ 中处理日期和时间相关的操作时,显得尤为重要。tm 结构以 C 结构的形式保存日期和时间。下面的实例使用了 tm 结构和各种与日期和时间相关的函数。C++ 继承了 C 语言用于日期和时间操作的结构和函数。为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 头文件。有四个与时间相关的类型:clock_t、time_t、size_t 和 tm。下面是 C/C++ 中关于日期和时间的重要函数。下面的实例获取当前系统的日期和时间,包括本地时间和协调世界时(UTC)。原创 2023-01-31 22:30:49 · 307 阅读 · 0 评论 -
C++基础——C++ 引用
因此,第一个声明可以读作 “r 是一个初始化为 i 的整型引用”,第二个声明可以读作 “s 是一个初始化为 d 的 double 型引用”。试想变量名称是变量附属在内存位置中的标签,您可以把引用当成是变量附属在内存位置中的第二个标签。引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。原创 2023-01-31 22:19:44 · 261 阅读 · 0 评论 -
C++基础——C++ 指针
指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。在这里,type 是指针的基类型,它必须是一个有效的 C++ 数据类型,var-name 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。int * ip;/* 一个整型的指针 */ double * dp;/* 一个 double 型的指针 */ float * fp;原创 2023-01-30 23:13:14 · 3501 阅读 · 0 评论 -
C++基础——C++ 字符串
由于在数组的末尾存储了空字符,所以字符数组的大小比单词 “Hello” 的字符数多一个。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。C++ 标准库提供了 string 类类型,支持上述所有的操作,另外还增加了其他更多的功能。所以现在您可以只是粗略地看下这个实例,等理解了面向对象的概念之后再回头来理解这个实例。C++ 编译器会在初始化数组时,自动把 ‘’ 放在字符串的末尾。原创 2023-01-30 22:53:37 · 266 阅读 · 0 评论 -
C++基础——C++数组
所有的数组都是以 0 作为它们第一个元素的索引,也被称为基索引,数组的最后一个索引是数组的总大小减去 1。C++ 支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。在 C++ 中,数组是非常重要的,我们需要了解更多有关数组的细节。您将创建一个数组,它与前一个实例中所创建的数组是完全相同的。元素的索引是放在方括号内,跟在数组名称的后边。大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。如果您省略掉了数组的大小,数组的大小则为初始化时元素的个数。原创 2023-01-29 23:41:03 · 1474 阅读 · 0 评论 -
C++基础——C++ 数字
我们已经在之前章节的各种实例中定义过数字。// 数字定义 short s;int i;long l;float f;double d;// 数字赋值 s = 10;i = 1000;f = 230.47;// 数字输出 cout原创 2023-01-29 23:36:37 · 514 阅读 · 0 评论 -
C++基础——C++ 函数
在 C++ 中,函数由一个函数头和一个函数主体组成。返回类型:一个函数可以返回一个值。return_type 是函数返回的值的数据类型。有些函数执行所需的操作而不返回值,在这种情况下,return_type 是关键字 void。函数名称:这是函数的实际名称。函数名和参数列表一起构成了函数签名。参数:参数就像是占位符。当函数被调用时,您向参数传递一个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数。原创 2023-01-29 23:15:42 · 347 阅读 · 0 评论 -
C++基础——C++ 判断
表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个?如果 Exp1 为假,则计算 Exp3 的值,结果即为整个?如果布尔表达式为 true,则 if 语句内的代码块将被执行。如果布尔表达式为 false,则 if 语句结束后的第一组代码(闭括号后)将被执行。判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。请注意,冒号的使用和位置。C++ 编程语言提供了以下类型的判断语句。原创 2023-01-29 23:07:49 · 1509 阅读 · 0 评论 -
C++基础——C++ 循环
如果条件永远不为假,则循环将变成无限循环。for 循环在传统意义上可用于实现无限循环。由于构成循环的三个表达式中任何一个都不是必需的,您可以将某些条件表达式留空来构成一个无限循环。有的时候,可能需要多次执行同一块代码。一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。循环控制语句更改执行的正常序列。当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。C++ 提供了下列的控制语句。点击链接查看每个语句的细节。编程语言提供了允许更为复杂的执行路径的多种控制结构。原创 2023-01-29 23:01:59 · 449 阅读 · 0 评论 -
C++基础——C++ 运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。原创 2023-01-28 23:01:13 · 1355 阅读 · 0 评论 -
C++基础——C++ 存储类
当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。还应注意的是,定义 ‘register’ 并不意味着变量将被存储在寄存器中,它意味着变量可能存储在寄存器中,这取决于硬件和实现的限制。从C++11开始,auto 关键字声明一个变量,该变量的类型是从其声明中的初始化表达式推导出来的。在 C++ 中,当 static 用在类数据成员上时,会导致仅有一个该成员的副本被类的所有对象共享。存储类是所有局部变量默认的存储类。原创 2023-01-28 22:24:05 · 233 阅读 · 0 评论 -
C++基础——C++ 修饰符类型
C++ 允许在 char、int 和 double 数据类型前放置修饰符。修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。修饰符和可应用于整型,和可应用于字符型,可应用于双精度型。修饰符和也可以作为或修饰符的前缀。。C++ 允许使用速记符号来声明无符号短整数或无符号长整数。您可以不写 int,只写单词 unsigned short 或 unsigned long,int 是隐含的。例如,下面的两个语句都声明了无符号整型变量。原创 2023-01-28 22:19:30 · 332 阅读 · 0 评论 -
C++基础——C++ 常量
使用#define预处理器。使用const关键字。原创 2023-01-28 22:13:18 · 378 阅读 · 0 评论 -
C++基础——C++变量作用域
在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。也就是说,全局变量一旦声明,在整个程序中都是可用的。在所有函数外部定义的变量(通常是在程序的头部),称为全局变量。全局变量的值在程序的整个生命周期内都是有效的。在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。我们将在后续的章节中学习什么是函数和参数。本章我们先来讲解声明是局部变量和全局变量。原创 2023-01-28 22:06:42 · 377 阅读 · 0 评论 -
C++基础——C++ 变量类型
变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储。在这里,type 必须是一个有效的 C++ 数据类型,可以是 char、w_char、int、float、double、bool 或任何用户自定义的对象,variable_list 可以由一个或多个标识符名称组成,多个标识符之间用逗号分隔。double d;行 int i, j, k;声明并定义了变量 i、j 和 k,这指示编译器创建类型为 int 的名为 i、j、k 的变量。变量可以在声明的时候被初始化(指定一个初始值)。原创 2023-01-28 22:01:53 · 349 阅读 · 0 评论 -
C++ 基础——C++ 数据类型
使用编程语言进行编程时,需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着,当您创建一个变量时,就会在内存中保留一些空间。您可能需要存储各种数据类型(比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等)的信息,操作系统会根据变量的数据类型,来分配内存和决定在保留内存中存储什么。原创 2023-01-28 21:15:09 · 421 阅读 · 0 评论 -
C++ 基础——C++ 基本语法
C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。原创 2023-01-28 21:02:01 · 353 阅读 · 0 评论 -
C++教程——1.C++ 简介
C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持面向过程编程、面向对象编程和泛型编程。C++ 被认为是一种语言,它综合了高级语言和低级语言的特点。C++ 是由 Bjarne Stroustrup(C++之父) 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的C(C with classes),后来在 1983 年更名为 C++。原创 2023-01-28 20:18:53 · 196 阅读 · 0 评论