努力学习C++
文章平均质量分 53
程子的小段
关注一下我的B站账号吧:https://space.bilibili.com/481428639?spm_id_from=333.1007.0.0
展开
-
C++ 标准库
C++ 标准库包含了所有的 C 标准库,为了支持类型安全,做了一定的添加和修改。原创 2024-02-05 10:49:20 · 242 阅读 · 0 评论 -
C++ STL 教程
在前面的章节中,我们已经学习了 C++ 模板的概念。C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。这三个组件都带有丰富的预定义函数,帮助我们通过简单的方式处理复杂的任务。原创 2024-02-05 10:47:22 · 438 阅读 · 0 评论 -
C++ Web 编程
上面的 C++ 程序是一个简单的程序,把它的输出写在 STDOUT 文件上,即显示在屏幕上。编译上面的代码,把可执行文件命名为 cplusplus.cgi,并把这个文件保存在 /var/www/cgi-bin 目录中。GET 方法是默认的从浏览器向 Web 服务器传信息的方法,它会在浏览器的地址栏中生成一串很长的字符串。然而,以这种方式搭建起来的 HTTP 服务器,不管何时请求目录中的某个文件,HTTP 服务器发送回来的不是该文件,而是以程序形式执行,并把执行产生的输出发送回浏览器显示出来。原创 2024-02-01 19:59:11 · 1280 阅读 · 0 评论 -
C++ 多线程
多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。多线程程序包含可以同时运行的两个或多个部分。这样的程序中的每个部分称为一个线程,每个线程定义了一个单独的执行路径。本教程假设您使用的是 Linux 操作系统,我们要使用 POSIX 编写多线程 C++ 程序。原创 2024-02-01 19:53:34 · 917 阅读 · 0 评论 -
C++ 预处理器
宏描述__LINE__这会在程序编译时包含当前行号。__FILE__这会在程序编译时包含当前文件名。__DATE__这会包含一个形式为 month/day/year 的字符串,它表示把源文件转换为目标代码的日期。__TIME__这会包含一个形式为 hour:minute:second 的字符串,它表示程序被编译的时间。return 0;原创 2024-01-31 18:56:49 · 693 阅读 · 0 评论 -
C++ 模板
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。每个容器都有一个单一的定义,比如 向量,我们可以定义许多不同类型的向量,比如 vector 或 vector。您可以使用模板来定义函数和类,接下来让我们一起来看看如何使用。原创 2024-01-30 09:54:20 · 629 阅读 · 0 评论 -
C++ 命名空间
/ 代码声明 }name::code;// code 可以是变量或函数// 第一个命名空间// 第二个命名空间// 调用第一个命名空间中的函数// 调用第二个命名空间中的函数return 0;原创 2024-01-30 09:52:03 · 1196 阅读 · 0 评论 -
C++ 动态内存
了解动态内存在 C++ 中是如何工作的是成为一名合格的 C++ 程序员必不可少的。很多时候,您无法提前预知需要多少内存来存储某个定义变量中的特定信息,所需内存的大小需要在运行时才能确定。在 C++ 中,您可以使用特殊的运算符为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址。这种运算符即 new 运算符。如果您不再需要动态分配的内存空间,可以使用 delete 运算符,删除之前由 new 运算符分配的内存。原创 2024-01-29 10:04:36 · 588 阅读 · 0 评论 -
C++ 异常处理
您可以通过继承和重载 exception 类来定义新的异常。int main()try//其他的错误在这里,what() 是异常类提供的一个公共方法,它已被所有子异常类重载。这将返回异常产生的原因。原创 2024-01-29 09:57:03 · 692 阅读 · 0 评论 -
C++ 文件和流
到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流。本教程介绍如何从文件读取流和向文件写入流。要在 C++ 中进行文件处理,必须在 C++ 源代码文件中包含头文件 和。原创 2024-01-26 10:14:29 · 1629 阅读 · 0 评论 -
C++ 接口(抽象类)
接口描述了类的行为和功能,而不需要完成类的特定实现。C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。设计抽象类(通常称为 ABC)的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误。原创 2024-01-26 10:06:47 · 360 阅读 · 0 评论 -
C++ 数据封装
封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。数据封装引申出了另一个重要的 OOP 概念,即数据隐藏。数据封装是一种把数据和操作数据的函数捆绑在一起的机制,数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。C++ 通过创建类来支持封装和数据隐藏(public、protected、private)。我们已经知道,类包含私有成员(private)、保护成员(protected)和公有成员(public)成员。原创 2024-01-25 09:28:59 · 467 阅读 · 0 评论 -
C++ 数据抽象
数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。数据抽象是一种依赖于接口和实现分离的编程(设计)技术。让我们举一个现实生活中的真实例子,比如一台电视机,您可以打开和关闭、切换频道、调整音量、添加外部组件(如喇叭、录像机、DVD 播放器),但是您不知道它的内部实现细节,也就是说,您并不知道它是如何通过缆线接收信号,如何转换信号,并最终显示在屏幕上。原创 2024-01-25 09:26:21 · 867 阅读 · 0 评论 -
C++ 多态
多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。导致错误输出的原因是,调用函数 area() 被编译器设置为基类中的版本,这就是所谓的静态多态,或静态链接 - 函数调用在程序执行前就准备好了。有时候这也被称为早绑定,因为 area() 函数在程序编译期间就已经设置好了。此时,编译器看的是指针的内容,而不是它的类型。原创 2024-01-24 09:59:21 · 708 阅读 · 0 评论 -
C++ 类成员访问运算符 -> 重载
运算符 -> 通常与指针引用运算符 * 结合使用,用于实现"智能指针"的功能。这些指针是行为与正常指针相似的对象,唯一不同的是,当您通过指针访问对象时,它们会执行其他的任务。比如,当指针销毁时,或者当指针指向另一个对象时,会自动删除对象。如果使用了 -> 运算符,返回类型必须是指针或者是类的对象。语句 p->m 被解释为 (p.operator->())->m。同样地,下面的实例演示了如何重载类成员访问运算符 ->。类 Ptr 的对象可用于访问类 X 的成员,使用方式与指针的用法十分相似。原创 2024-01-24 09:37:02 · 447 阅读 · 0 评论 -
C++ 下标运算符 [] 重载
下标操作符 [] 通常用于访问数组元素。重载该运算符用于增强操作 C++ 数组的功能。下面的实例演示了如何重载下标运算符 []。原创 2024-01-23 09:31:41 · 597 阅读 · 0 评论 -
C++ 函数调用运算符 () 重载
函数调用运算符 () 可以被重载用于类的对象。当重载 () 时,您不是创造了一种新的调用函数的方式,相反地,这是创建一个可以传递任意数目参数的运算符函数。下面的实例演示了如何重载函数调用运算符 ()。原创 2024-01-23 09:30:28 · 416 阅读 · 0 评论 -
C++ 赋值运算符重载
就像其他运算符一样,您可以重载赋值运算符( = ),用于创建一个对象,比如拷贝构造函数。下面的实例演示了如何重载赋值运算符。原创 2024-01-22 09:06:02 · 429 阅读 · 0 评论 -
C++ ++ 和 -- 运算符重载
下面的实例演示了如何重载递增运算符( ++ ),包括前缀和后缀两种用法。类似地,您也可以尝试重载递减运算符( – )。前缀形式重载调用 Check operator ++ () ,后缀形式重载调用 operator ++ (int)。递增运算符( ++ )和递减运算符( – )是 C++ 语言中两个重要的一元运算符。注意,int 在 括号内是为了向编译器说明这是一个后缀形式,而不是表示整数。原创 2024-01-22 09:04:25 · 613 阅读 · 0 评论 -
C++ 输入/输出运算符重载
C++ 能够使用流提取运算符 >> 和流插入运算符 > 和插入运算符原创 2024-01-19 09:35:27 · 405 阅读 · 0 评论 -
C++ 关系运算符重载
C++ 语言支持各种关系运算符( < 、 > 、 = 、 == 等等),它们可用于比较 C++ 内置的数据类型。下面的实例演示了如何重载 < 运算符,类似地,您也可以尝试重载其他的关系运算符。您可以重载任何一个关系运算符,重载后的关系运算符可用于比较类的对象。原创 2024-01-19 09:34:27 · 433 阅读 · 0 评论 -
C++ 二元运算符重载
二元运算符需要两个参数,下面是二元运算符的实例。我们平常使用的加运算符( + )、减运算符( - )、乘运算符( * )和除运算符( / )都属于二元运算符。就像加(+)运算符。下面的实例演示了如何重载加运算符( + )。类似地,您也可以尝试重载减运算符( - )和除运算符( / )。原创 2024-01-18 09:40:02 · 416 阅读 · 0 评论 -
C++ 一元运算符重载
一元运算符通常出现在它们所操作的对象的左边,比如!obj、-obj 和 ++obj,但有时它们也可以作为后缀,比如 obj++ 或 obj–。希望上面的实例能够帮您更好地理解一元运算符重载的概念,类似地,您可以尝试重载逻辑非运算符(!下面的实例演示了如何重载一元减运算符( - )。原创 2024-01-18 09:38:17 · 441 阅读 · 0 评论 -
C++ 重载运算符和重载函数
C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。选择最合适的重载函数或重载运算符的过程,称为重载决策。原创 2024-01-17 09:29:19 · 1266 阅读 · 0 评论 -
C++ 继承
面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。继承代表了 is a 关系。例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。原创 2024-01-17 09:20:09 · 1254 阅读 · 0 评论 -
C++ 类的静态成员
我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化,如下面的实例所示。原创 2024-01-16 14:57:31 · 353 阅读 · 0 评论 -
C++ 指向类的指针
一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。与所有的指针一样,您必须在使用指针之前,对指针进行初始化。原创 2024-01-16 14:54:20 · 411 阅读 · 0 评论 -
C++ this 指针
在 C++ 中,this 指针是一个特殊的指针,它指向当前对象的实例。在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this是一个隐藏的指针,可以在类的成员函数中使用,它可以用来指向调用对象。当一个对象的成员函数被调用时,编译器会隐式地传递该对象的地址作为 this 指针。友元函数没有 this 指针,因为友元不是类的成员,只有成员函数才有 this 指针。Value : 42。原创 2024-01-15 15:37:34 · 549 阅读 · 0 评论 -
C++ 内联函数
如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。如果已定义的函数多于一行,编译器会忽略 inline 限定符。C++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。在类定义中的定义的函数都是内联函数,即使没有使用 inline 说明符。原创 2024-01-15 15:35:10 · 671 阅读 · 0 评论 -
C++ 友元函数
类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。原创 2024-01-12 09:06:06 · 433 阅读 · 0 评论 -
C++ 拷贝构造函数
如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。在这里,obj 是一个对象引用,该对象是用于初始化另一个对象的。通过使用另一个同类型的对象来初始化新创建的对象。复制对象把它作为参数传递给函数。复制对象,并从函数返回这个对象。原创 2024-01-12 09:04:44 · 582 阅读 · 0 评论 -
C++ 类构造函数 & 析构函数
类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。原创 2024-01-11 09:59:57 · 737 阅读 · 0 评论 -
C++ 类访问修饰符
数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记来指定的。关键字称为访问修饰符。一个类可以有多个 public、protected 或 private 标记区域。每个标记区域在下一个标记区域开始之前或者在遇到类主体结束右括号之前都是有效的。成员和类的默认访问修饰符是 private。原创 2024-01-11 09:57:33 · 1004 阅读 · 0 评论 -
C++ 类成员函数
成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义。在类定义中定义的成员函数把函数声明为内联的,即便没有使用 inline 标识符。类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。在这里,需要强调一点,在 :: 运算符之前必须使用类名。原创 2024-01-10 09:50:05 · 613 阅读 · 0 评论 -
C++ 类 & 对象
定义一个类需要使用关键字class,然后指定类的名称,并类的主体是包含在一对花括号中,主体包含类的成员变量和成员函数。定义一个类,本质上是定义一个数据类型的蓝图,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。class Boxpublic:// 盒子的长度// 盒子的宽度// 盒子的高度关键字public确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。您也可以指定类的成员为private或protected,这个我们稍后会进行讲解。原创 2024-01-10 09:47:18 · 472 阅读 · 0 评论 -
C++ 数据结构
为了定义结构,您必须使用 struct 语句。type_name是结构体类型的名称,是标准的变量定义,比如int i;或者float f;或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。下面是声明一个结构体类型Books,变量为book} book;原创 2024-01-09 09:28:56 · 897 阅读 · 0 评论 -
C++ 基本的输入输出
C++ 标准库提供了一组丰富的输入/输出功能,我们将在后续的章节进行介绍。本章将讨论 C++ 编程中最基本和最常见的 I/O 操作。C++ 的 I/O 发生在流中,流是字节序列。如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。原创 2023-12-26 19:47:16 · 184 阅读 · 0 评论 -
C 库函数 - strxfrm()
C 库函数 size_t strxfrm(char *dest, const char *src, size_t n) 根据程序当前的区域选项中的 LC_COLLATE 来转换字符串 src 的前 n 个字符,并把它们放置在字符串 dest 中。原创 2023-12-20 18:18:37 · 308 阅读 · 0 评论 -
C 库函数 - difftime()
C 库函数 double difftime(time_t time1, time_t time2) 返回 time1 和 time2 之间相差的秒数 (time1 - time2)。这两个时间是在日历时间中指定的,表示了自纪元 Epoch(协调世界时 UTC:1970-01-01 00:00:00)起经过的时间。原创 2023-12-20 18:16:02 · 701 阅读 · 0 评论 -
C 库函数 - mktime()
C 库函数 time_t mktime(struct tm *timeptr) 把 timeptr 所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数,发生错误时返回-1。原创 2023-12-19 10:47:50 · 593 阅读 · 0 评论