自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 00-1.CloudCompare2.13.2源码编译(Window平台)

说明:本人浅浅学习了C++的一些内容,近期在学习CMake,想要结合开源程序巩固基础,同时在工作中常用一个叫CloudCompare的开源点云处理软件,因此希望阅读该软件源码以加深自己对于编程的理解。由于本人第一次接手如此大项目,而且又是一名编程新手,文中难免有许多疏漏错误,望见谅。

2024-07-24 17:51:55 1028

原创 17.4范围(From C++20)

可以使用迭代器对范围内的元素进行迭代,这些迭代器可以通过诸如,,等迭代器进行检索. 范围库还支持,,和,后者返回范围内的元素数量,但只有在常量时间内检索大小时才有效,否则,可以使用计算范围的begin迭代器和end迭代器之间的元素数目.所有这些访问器都不是成员函数,而是独立的自由函数,都需要一个范围作为参数.投影许多基于范围的算法都有一个所谓的投影参数,即一个回调函数,用于在将每个元素移交给算法之前对其进行转换。注:需要同时包含和头文件视图允许对基础范围的元素执行操作。视图可以被链接/组合在一起,形

2024-07-16 23:12:24 881

原创 17.3迭代器适配器

为特殊的迭代器,分为两组.insert()第二组适配器是通过另一个迭代器创建的,不是容器,通常作为输入迭代器.

2024-07-16 23:11:46 167

原创 17.3迭代器适配器

为特殊的迭代器,分为两组.insert()第二组适配器是通过另一个迭代器创建的,不是容器,通常作为输入迭代器.

2024-07-16 23:10:55 182

原创 17.2流迭代器

是一个输出流迭代器。它是一个接受元素类型作为模板类型参数的类模板。构造函数接受一个输出流和一个分隔符字符串,用于写入每个元素后面的流。,通过迭代器抽象从输入流中读取值。它是一个接受元素类型作为模板类型参数的类模板。作为算法和容器方法的来源。可以使用输入流迭代器。

2024-07-16 23:09:55 128

原创 17.1迭代器

采用这种看似复杂方式的原因是为了支持空区间(不包含任何元素的容器),此时。

2024-07-16 23:07:43 241

原创 13.5文件系统支持库

路径仅表示文件系统中的目录或文件。路径可能会指向不存在的目录或文件。如果要查询文件系统上的实际目录或文件,需要从路径构造一个。注意,结束迭代器不再是集合的一部分,因此不再引用有效的。如果要知道何时停止迭代,那么需要一个结束迭代器。如果要创建起始迭代器,那么需要构造一个。,并将要遍历目录的路径作为参数传递。如果要构造结束迭代器,那么需要默认构造一个。如果希望递归地遍历给定目录中的所有文件和子目录,可以使用。平台相关的路径分隔符会自动插入。基于范围的 for循环可用于遍历路径的不同组件。获取一个文件的大小;

2024-07-16 23:03:21 376

原创 13.4双向IO

fstream 类提供了双向文件流。fstream 特别适用于需要替换文件中数据的应用程序,因为可通过读取文件找到正确的位置,然后立即切换为写入文件。bidirectional stream可同时执行输入和输出, 支持。

2024-07-16 23:02:03 143

原创 13.3文件流

fstream>定义的和类提供了文件的输入输出功能.输出文件流和其他输出流的唯一主要区别在于∶文件流的构造函数可以接收文件名以及打开文件的模式作为参数。默认模式是写文件(),这种模式从文件开头写文件,改写任何已有的数据。上述选项可以组合使用, 用分隔开即可默认模式,ofstream默认模式。

2024-07-16 23:01:14 301

原创 13.2字符串流

类用于将数据写入字符串,用于从字符串中读出数据.

2024-07-16 23:00:00 321

原创 13.1使用流

略。

2024-07-16 22:59:05 636

原创 12.6概念(From C++20)

编写概念时,请确保它们是在为语义建模,而不仅仅是语法建模。概念定义的泛型语法:概念表达式的语法如下:概念表达式的计算结果为真或假。如果它的计算结果为真,那么表示使用给定的模板实参为概念建模。计算结果为布尔值的常量表达式可以直接用作概念定义的约束。但它的结果必须精确计算为一个布尔值,并且没有任何类型转换。语法:为可选参数,每个必须以分号作为结尾.一个简单的 requirement是一个任意的表达式语句,而不是以开头。不允许使用变量声明、循环、条件语句等。并且这个表达式语句永远不会被计算;编译器也只是用于

2024-07-16 22:43:10 649

原创 10.7类型转换

类似,但它会创建一个指定目标类型的新对象,并按位从源对象复制到此新对象。它有效地将源对象的位解释为目标对象的位。的一个用例是普通可复制类型的二进制I/O。比如,可以将此类型的各个字节写入文件。如果没有可用的转换构造函数,则无法将一种类型的对象直接。提供了对继承层次结构中的强制转换的运行期检查。基本上,根据C++的类型规则,不能做任何没有意义的事情。执行显式转换,这是用户定义的构造函数或转换例程允许的。要求源对象和目标对象的大小相同,并且两者都是可复制的。类型的指针只是指向内存中的某个位置。

2024-07-16 22:40:39 335

原创 10.6有趣而晦涩的继承问题

如果一个类同时从两个或多个路径继承自同一个基类,而这个基类的某些成员在多条路径上被多次继承,那么派生类中就会存在多个这样的成员的副本,从而导致不明确的引用。如果一个基类的某个构造函数与另一个基类的构造函数具有相同的参数列表,就不可能从基类继承构造函数,因为那样会导致歧义。)初始化对象的父类部分。与所有的重写一样,此时Derived类的构造函数的优先级高于继承的构造函数。总结来说,虚基类的作用是解决多继承中的二义性问题,确保在派生类中只继承一份共享基类的成员,从而实现了更清晰的继承关系和避免潜在的错误。

2024-07-16 22:38:59 729

原创 10.5多重继承

多重继承通常被认为是面向对象编程中一种复杂且不必要的部分。请判断多重继承是否有用,本节将阐述C++中多重继承的机制。

2024-07-16 22:35:47 144

原创 10.4继承与多态性

纯虚方法(pure virtual methods)在类定义中显式说明该方法不需要定义。如果将某个方法设置为纯虚方法,就是告诉编译器当前类中不存在这个方法的定义。具有至少一个纯虚方法的类称为抽象类,因为这个类不能被实例化。如果派生类没有实现从父类继承的所有纯虚方法,那么派生类也是抽象的,客户就不能实例化派生类的对象。抽象类提供了一种禁止其他代码直接实例化对象的方法, 而它的派生类可以实例化对象。对于实现抽象基类所有纯虚方法的派生类, 可以使用基类的指针指向派生类.

2024-07-15 21:46:58 198 1

原创 10.3利用父类

编写派生类时,需要知道父类和派生类之间的交互方式。创建顺序、构造函数链和类型转换都是潜在的 bug来源。

2024-07-15 21:45:46 303

原创 10.1使用继承构建类

把数据成员默认设置为 private 的原因是,这会提供最高级别的封装,这意味着可以改变数据的表示方式,而保持 public 或 protected 的接口不变。**每个具有一个或多个虚方法的类都有一张虚表,这种类的每个对象都包含指向虚表的指针,这个虚表包含指向虚方法实现的指针。即使基类的引用或指针知道这实际上是一个派生类,也无法访问没有在基类中定义的,定义在派生类中的方法或成员。为了重写某个方法,需要在派生类的定义中重新声明这个方法,就像在基类中声明的那样,但是需要添加关键字。

2024-07-15 21:44:12 603

原创 9.7运算符重载

如果可以显式地将 operator<=设置为默认,我建议这样做,而不是自已实现它。如果自己实现运算符,则无论何时添加数据成员或更改现有数据成员,都需要记住更新 operator<→的实现。这些运算符与基本算术运算符不同,它们会改变运算符左边的对象,而不是创建一个新对象。只有当 operator和<=→使用定义操作符的类类型的 const 引用作为参数时,才可能显式将operator和<=>设置为默认。如果既有某个运算符的普通版本,又有简写版本,建议你基于简写版本实现普通版本,以避免代码重复。

2024-07-15 21:40:29 254

原创 9.6类内的枚举类型

【代码】9.6类内的枚举类型。

2024-07-15 21:39:23 70

原创 9.4不同的数据成员类型

不仅要在类定义中列出 static 类成员,还需要在源文件中为其分配内存,通常是定义类方法的那个源文件。在此还可初始化 static 成员,但注意与普通的变量和数据成员不同,默认情况下它们会初始化为0。记住,在初始化一个引用后,不能改变它指向的对象,因此无法在赋值运算符中对引用赋值。这意味着根据使用情形,可能无法为具有引用数据成员的类提供赋值运算符。如果属干这种情况,通常将赋值运算符标记为删除。这样做的好处是不必在源文件中为它们分配空间。最后,引用数据成员也可被标记为 const。

2024-07-15 21:37:54 261

原创 9.3与方法有关的有关内容

不能将 static 方法声明为 const,因为这是多余的。静态方法没有类的实例,因此不可能改变内部的值。

2024-07-15 21:35:15 586

原创 9.2对象中的动态内存分配

对于不被复制的参数,通过const引用传递仍然是应使用的方法,值传递建议仅适用于函数无论如何都要复制的参数。当你声明了一个或多个特殊成员函数(析构函数、拷贝构造函数、移动构造函数、拷贝赋值运算符和移动赋值运算符)时,通常需要声明所有这些函数,这称为"5规则"(Rule of Five)。右值引用的目的是在涉及右值时提供可选用的特定重载函数, 通过右值引用, 某些涉及复制大量值的操作可通过简单地复制指向这些值的指针来实现。,但当函数重载使用了右值引用时,可以解析临时对象,用于该函数重载。

2024-07-15 21:32:59 774

原创 9.1友元

C+允许某个类将其他类、其他类的成员函数或非成员函数声明为友元(friend),友元可以访问类的protected、private 数据成员和方法.

2024-07-15 21:31:15 78

原创 8.3对象的生命周期

略// ...

2024-07-15 21:29:11 782

原创 7.5智能指针

int main()这项特性适用于当unique_ptr离开作用域时释放资源,如关闭文件或网络套接字。

2024-07-15 21:20:24 577

原创 7.1使用动态内存

多维数组的内存布局是不连续的,可以首先为自由存储区数组的第一个下标分配一个连续的数组。该数组的每个元素实际上是指向另一个数组的指针,另一个数组保存的是第二个下标维度的元素。

2024-07-15 21:14:48 156

原创 2.2字符串格式化(From C++20)

parse()和format()。待补充。

2024-07-15 21:07:47 611

原创 2.1动态字符串

原始字符串字面量是可横跨多行代码的字符串字面量,不需要转义嵌入的双引号,像t和n这种转义序列不按照转义序列的方式处理,而是按照普通文本的方式处理。返回string_view 会带来使返回的 string_view 无效的风险,例如当它指向的字符串需要重新分配时。使用原始字符串字面量,不使用n转义序列来开始一个新行,只需要在源代码中按下 Enter 键以开始一个真正的新行。字符串字面量实际上存储在内存的只读部分。方法,前者将起始指针前移给定的偏移量来收缩字符串,后者则将结尾指针倒退给定的偏移量来收缩字符串。

2024-07-15 21:05:07 1009

原创 1.1_C++速成

typedef。

2024-07-15 21:00:58 596

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除