![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++Primer笔记
文章平均质量分 91
wasamtc
这个作者很懒,什么都没留下…
展开
-
第十九章:特殊工具与技术
枚举属于字面值常量类型。C++包含两种枚举:限定作用域和不限定作用域的。限定作用域是C++11新标准引入的,定义方式为在定义的时候在enum后面加上class或struct。在限定作用域的枚举类型中,枚举成员的名字遵循常规的作用域准则,并且在枚举类型的作用域外是不可访问的(可以用作用域运算符访问);在不限定作用域的枚举类型中,枚举成员的作用域与枚举类型本身的作用域相同。默认情况下,枚举值从0开始,依次加1,不过我们也能为一个或几个枚举成员指定专门的值。枚举值不一定唯一。枚举成员是const的。原创 2024-01-14 09:58:46 · 1000 阅读 · 1 评论 -
第十八章:用于大型程序的工具
异常处理机制允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应的处理。异常使得我们能够将问题的检测与解决过程分离开来。在C++语言中,我们通过抛出一条表达式来引发一个异常。被抛出的表达式的类型以及当前的调用链共同决定了哪段处理代码将被用来处理该异常。被选中的处理代码是在调用链终于抛出对象类型,处理完后继续执行处理代码块之后的代码。异常的处理过程是根据栈展开的过程进行的。栈展开的过程中如退出了某些块某些局部对象会被自动销毁。析构函数不应该抛出不能被它自身处理的异常。原创 2024-01-12 12:22:41 · 413 阅读 · 0 评论 -
第十七章:标准库特殊设施
tuple是类似pair的。不同tuple类型的成员类型不相同,一个tuple可以有任意数量的成员。每个确定的tuple类型的成员数目是固定的。tuple类型及其伴随类型都定义在tuple中。当我们定义一个tuple时,需要指出每个成员的类型。make_tuple根据初始值的类型来推断tuple的类型。要访问一个tuple的成员,就要使用一个名为get的标准库函数模板。原创 2024-01-11 12:38:00 · 885 阅读 · 0 评论 -
第十六章:模板与泛型编程
类模板是用来生成类的蓝图的。与函数模板的不同之处是,**编译器不能为类模板推断模板参数类型。**我们必须在模板名后的尖括号中提供额外信息用来代替模板参数的模板实参列表。定义在类模板之外的成员函数必须以关键字template开始,后接类模板参数列表。同样的,在类外定义一个成员时,必须说明成员属于哪个类,且类名需要包含模板形参。默认情况下,一个类模板的成员函数只有当程序用到它时才进行实例化。当我们使用一个类模板类型时必须提供模板实参,但在类模板自己的作用域中我们可以直接使用模板名而不提供实参。原创 2024-01-08 13:54:38 · 884 阅读 · 0 评论 -
第十五章:面向对象程序设计
通过使用数据抽象可以将类的接口与实现分离;使用继承可以定义相似的类型并对其相似关系建模;使用动态绑定可以在一定程度上忽略相似类型的区别,而以统一的方式使用他们的对象。基类将类型相关的函数与派生类不做改变直接继承的函数区分对待。对于某些函数,基类希望它派生类各自定义适合自身的版本,此时基类就将这些函数声明成虚函数。C++11新标准允许派生类显式地注明它将使用哪个成员函数改写基类的虚函数,具体措施是在该函数的形参列表之后加一个override关键字。原创 2024-01-06 12:19:10 · 904 阅读 · 0 评论 -
第十四章:重载运算与类型转换
产生的结果一致时才定义<运算符。原创 2023-12-17 12:01:27 · 855 阅读 · 0 评论 -
C++Primer第十三章:动态内存
这一章我们学习C++的拷贝控制,所谓拷贝控制就是类如何控制该类型对象拷贝,赋值,移动或销毁时做什么。主要通过五种特殊的成员函数来控制这些操作:拷贝构造函数,拷贝赋值函数,移动构造函数,移动赋值函数,析构函数。所谓构造就是用一个同类型的对象来初始化本对象,所谓赋值就是将一个对象赋予同类型的另一个对象。如果自己不定义编译器会默认定义这些操作。原创 2023-12-15 09:14:24 · 347 阅读 · 0 评论 -
C++Primer第十二章:动态内存
在C++中,new和delete分别负责分配和释放空间。新的标准库提供了两种智能指针,shared_ptr,unique_ptr,还有一种weak_ptr。都定义在memory头文件中。智能指针也是模板。原创 2023-08-09 09:30:30 · 131 阅读 · 0 评论 -
C++Primer第十一章:关联容器
关联容器与顺序容器不同之处在于顺序容器是按在容器中的位置保存和访问元素,而关联容器是按关键字来保存和访问元素的。原创 2023-08-03 14:12:30 · 123 阅读 · 0 评论 -
C++Primer第十章:泛型算法
哪些只接受一个单一迭代器来表示第二个序列的算法,都假定第二个序列至少与第一个序列一样长。在C++中,无论是C风格的字符串还是字符串常量,都不能直接用==这些运算符进行比较,因为C风格的字符串和字符串常量直接比较都是相当于在比较首指针地址的大小,会出问题。。当我们使用一个迭代器向容器元素赋值时,我们覆盖了原来的值,而当我们使用插入迭代器向容器元素赋值时,这个值是添加到容器中的。原创 2023-08-02 09:13:12 · 103 阅读 · 0 评论 -
C++Primer第九章:顺序容器
使用front,back,下标和at返回的都是引用,如果要用auto接收引用,则要加引用符号&。因为forward_list的删除添加需要用到前一个个元素,所以它的添加和删除与其他的顺序容器不同,它没有insert,emplace,erase等操作,它的是insert_after之类的after操作,即操作后一个元素。使用resize,如果新大小小于当前大小,后部的元素会被删除,如果新大小大于当前大小,新元素会添加到后部。原创 2023-07-20 10:38:54 · 83 阅读 · 1 评论 -
C++Primer第八章:IO库
标准库中主要定义了三个流来进行IO操作。iostream处理控制台IO;fstream处理命名文件IO;stringstream处理内存string的IO。后面两个继承自第一个。所以第一个的操作后面两个也是可以用的。例如>>原创 2023-06-29 11:02:00 · 421 阅读 · 0 评论 -
C++Primer第七章:类
类型的基本思想是数据抽象和封装,数据抽象依赖于接口和实现分离。类的接口包括用户所能执行的操作,而类的实现包括类的数据成员,负责接口实现的函数体以及定义类所需的各种私有函数。封装实现了类的接口和实现的分离。原创 2022-10-20 17:07:31 · 542 阅读 · 0 评论 -
C++Primer第六章:函数
函数是一个命名了的代码块,我们可以通过调用函数执行相应的代码。每个函数都包括返回类型,名字和形参列表以及函数体。C++中函数可以被重载,从一组重载函数中选取最佳函数的过程称为函数匹配。原创 2022-10-16 15:28:27 · 527 阅读 · 0 评论 -
C++Primer第五章:语句
一般来说,语句是顺序执行的,但仅有顺序执行远远不够,因此,C++语言提供了一组控制流语句以支持更复杂的执行路径。原创 2022-10-11 16:14:01 · 487 阅读 · 0 评论 -
C++Primer第四章:表达式
C++提供了丰富的运算符作用于内置类型,同时运行自定义的类型定义这些运算符。本章介绍语言本身定义的,用于内置类型的一些运算符以及几种标准库定义的运算符。表达式由一个或多个对象组成,对表达式求值可得一个结果。变量和字面值是最简单的表达式,其值为自身。原创 2022-10-09 16:46:24 · 487 阅读 · 0 评论 -
C++Primer第三章:字符串、向量和数组
之前介绍的都是C++的内置类型,由C++语言直接定义,直接实现到计算机硬件中。而标准库还定义了一些具有更高级性质的类型,本章介绍两种最重要的,即string和vector。原创 2022-10-05 09:29:43 · 870 阅读 · 0 评论 -
C++Primer第二章:变量和基本类型
C++11新标准规定,可以为类(或结构体)内的数据成员提供一个类内初始值。没有初始值的成员将被默认初始化。为了确保各个文件中的类的定义一致,类通常被定义在头文件中,而且类所在头文件的名字应与类的名字一样。确保头文件多次包含仍能安全工作的常用技术是预处理器,#include是一项预处理器功能,当预处理器看到#include标志时会用指定的头文件的内容代替#include。还有一项预处理器的功能是头文件保护符,头文件保护符依赖于预处理变量,预处理变量有两种状态:已定义和未定义。原创 2022-09-26 17:22:36 · 750 阅读 · 0 评论 -
C++Primer笔记:第一章:开始
错误的注释比没有注释更糟糕。多行注释中间不能有*/,一般调试的时候使用单行注释。当多行注释跨越多行,最好显示指出注释,可以在每一行的开头加一个*一个类定义了一个类型,以及与之相关的一组操作。对于包含来自标准库的文件应使用,而不是来自标准库的应使用""大多数操作系统支持文件重定向,这种机制允许我们将标准输入和标准输出与相关文件关联起来。代表输出点运算符.只能用于类类型的对象,其左侧运算对象必须是一个类类型的对象,右侧是该对象的一个成员,运算结果为右侧对象指定的成员。原创 2022-09-18 09:55:58 · 168 阅读 · 0 评论