
《C++ Primer》
文章平均质量分 93
《C++ Primer》第5版阅读笔记
MaTF_
这个作者很懒,什么都没留下…
展开
-
《C++ Primer》第15章 面向对象程序设计(一)
*面向对象程序设计(object-oriented programming)**的核心思想是数据抽象、继承和动态绑定。我们首先完成Quotepublic:private:// 书籍的ISBN编号protected:// 书籍的原价基类通常都应该定义一个虚析构函数,即使该函数不执行任何实际操作。public:private:// 适用折扣的最小购买量// 折扣额else {Bulk_quote从Quote继承了isbn函数和bookNoprice。原创 2024-01-18 10:47:53 · 706 阅读 · 0 评论 -
《C++ Primer》第14章 重载运算与类型转换(二)
标准库定义了一组表示算术运算符、关系运算符、逻辑运算符的类,每个类分别定义了一个执行命名操作的调用运算符。这些类定义在头文件functionalpublic:private:SmallIntsi = 4;si + 3;// si被隐式转换成int,然后执行整型加法编译器一次只能执行一个用户定义的类型转换,但隐式的用户定义类型转换可以置于标准类型转换的之前或之后,并与其一起使用。因此,我们可以将任何算术类型传递给SmallInt的构造函数,也能将SmallInt对象转换成int。原创 2024-01-11 10:58:29 · 969 阅读 · 0 评论 -
《C++ Primer》第14章 重载运算与类型转换(一)
/ curr为无符号类型,如果curr为0,--后将得到一个很大的正数--curr;原创 2024-01-11 10:57:47 · 515 阅读 · 0 评论 -
《C++ Primer》第13章 拷贝控制(三)
private:// 确保容器有足够的空间容纳新元素// 在first_free指向的元素中构造s的副本// 分配大小合适的空间// 返回拷贝的开始位置和尾后位置// 保证传递给deallocate的是一个先前由allocate返回的指针p!= elements;) {// 逆序销毁旧元素free();// 允许自赋值free();原创 2023-12-20 19:52:25 · 946 阅读 · 0 评论 -
《C++ Primer》第13章 拷贝控制(二)
对于行为类似指针的类,我们要拷贝的是指针本身,而不是它指向的string。析构函数不能单方面地释放所关联string,只有当最后一个指向string的HasPtr销毁时,它才可以释放String。令一个类展现类似指针的行为最好的方法是用shared_ptr来管理类中的资源。但是,有时我们希望直接管理资源。此时,我们可以使用引用计数。int i;++*rhs.use;delete ps;delete use;原创 2023-12-15 11:12:59 · 448 阅读 · 0 评论 -
《C++ Primer》第13章 拷贝控制(一)
在新标准下,我们可以通过将拷贝构造函数和拷贝赋值运算符定义为删除的函数(deleted function)来阻止拷贝。删除的函数是这样一种函数:我们虽然声明了它们,但不能以任何形式使用它们。在参数列表后面加上=delete=delete必须出现在函数第一次声明的时候,且可以对任何函数指定=delete。原创 2023-12-12 18:40:25 · 1006 阅读 · 0 评论 -
《C++ Primer》第12章 动态内存(二)
在大多数情况下,我们应该使用容器而非动态数组,使用容器的类可以使用默认版本的拷贝、赋值、析构操作,而使用动态数组的类必须定义自己版本的操作。分配的对象,不论是单个对象还是数组,都是默认初始化的。的规则有一个例外:我们可以拷贝或赋值一个将要被摧毁的。不支持下标运算符,为了访问访问数组中的元素,必须用。得到的仅仅是一个指针,而并不是一个数组,那么。释放一个动态数组,这个行为是未定义的。中的同名成员不同,它还要额外检查指向的。一个对象时使用了方括号,结果是未定义的。的引用计数,一旦最后一个指向对象的。原创 2023-12-11 14:29:53 · 426 阅读 · 0 评论 -
《C++ Primer》第12章 动态内存(一)
StrBlob。原创 2023-12-07 10:16:52 · 1121 阅读 · 1 评论 -
《C++ Primer》第11章 关联容器
和位置相关的操作,如push_backpush_front。接受一个元素值和一个数量值的构造函数和插入操作。关联容器的迭代器都是双向的。每个关联容器都定义了一个默认构造函数,它创建一个空容器;我们也可以将关联容器初始化为另一个同类型容器的拷贝;原创 2023-12-04 16:46:53 · 468 阅读 · 0 评论 -
《C++ Primer》第10章 算法(二)
可以发现,使用反向迭代器会导致我们的实际输出也是反过来的,所以我们需要使用。对于向算法传递错误类别迭代器的问题,很多编译器不会给出警告信息。的迭代器都是随机访问迭代器,访问内置数组元素的指针也是。:可以双向移动,支持前向迭代器所有操作,支持前置和后置。外,所有标准库容器都提供符合双向迭代器要求的迭代器。通用算法不会改变容器,而链表特有版本会改变底层容器。创建一个流迭代器时,必须指定迭代器要读写的类型。外,标准库中的所有容器都同时支持递增和递减操作。方式实现交换,所以专用版本的算法效率往往更高。原创 2023-11-30 19:34:09 · 1218 阅读 · 0 评论 -
《C++ Primer》第10章 算法(一)
大多数算法定义在头文件algorithm中,头文件numeric中也定义了一组数值泛型算法。一般情况下,算法不直接操作容器,而是通过迭代器来进行操作。比如标准库算法find,前两个参数是表示元素范围的迭代器,第三个参数是一个值。find将范围内的每个元素与给定值相比较,返回第一个与给定值相等的元素的迭代器,如果范围中无匹配元素,则返回第二个参数int val;由于指针就像内置数组上的迭代器一样,我们可以用find当我们通过插入迭代器(insert iterator)原创 2023-11-24 15:52:13 · 972 阅读 · 0 评论 -
《C++ Primer》第9章 顺序容器(一)
所有顺序容器都提供了快速顺序访问向容器添加、删除元素非顺序访问容器中的元素除了固定大小的array外,其他容器提供高效、灵活的内存管理。string和vector将元素保存在连续的空间中,所以支持随机访问,但在中间位置添加或删除元素就非常耗时。添加一个元素可还需要分配额外的存储空间,此时容器中的每个元素都将移动到新的存储空间中。list和可以快速在任何位置添加或删除元素,但不支持随机访问。这两个容器的额外内存开销也较大。deque。原创 2023-11-22 19:15:22 · 214 阅读 · 0 评论 -
《C++ Primer》第9章 顺序容器(三)
string。原创 2023-11-22 19:12:50 · 117 阅读 · 0 评论 -
《C++ Primer》第9章 顺序容器(二)
的迭代器。原创 2023-11-16 16:45:30 · 112 阅读 · 0 评论 -
《C++ Primer》第8章 IO库
我们不能拷贝或对 IO 对象赋值,进行 IO 操作的函数通常以引用的方式传递和返回流。当一个输入流被关联到一个输出流时,任何试图从输入流中读取数据的操作都会先刷新输出流的缓冲区。IO 操作可能发生不同类型的错误,IO 类定义了一些函数和标志,可以帮助我们访问和操纵流的。,如果本对象关联到一个输出流,则返回那个输出流的指针;每个流最多与一个流关联,但多个流可以同时关联到一个输出流(单向关联)。的单参数版本接受一个指向输出流的指针,将自己关联到此输出流。对于一个给定的流,每当打开文件时都可以改变文件模式。原创 2023-11-09 16:36:22 · 119 阅读 · 0 评论 -
《C++ Primer》第7章 类(二)
对于定义在类外部的函数成员而言,一旦遇到类名,定义的剩余部分就是在类的作用域之内void Window_mgr::clear(ScreenIndex i){ // ScreanIndex是类Window_mgr中的类型成员需要注意的是,由于返回类型出现在类名之前,所以它位于类的作用域之外,所以如果我们的返回类型是,就必须写成。在函数内查找该名字,只有在使用之前出现的声明才被考虑。如果在函数内没找到,则在类内查找,此时无需考虑先后顺序。如果类内没找到,则在成员函数定义之前的作用域内寻找。原创 2023-11-08 20:24:08 · 151 阅读 · 0 评论 -
《C++ Primer》第7章 类(一)
Sales_dataSales_datathis我们调用成员函数时,实际上是替某个对象调用它。成员函数通过一个名为this的额外隐式参数来访问调用它的对象。当我们调用一个函数时,编译器负责用请求该函数的对象地址初始化this。在成员函数内部,任何对类成员的直接访问都被看作this的隐式引用。因为this总是指向“这个”对象,所以this是一个指针常量。this如果非成员函数是类接口的组成部分,则这些函数的声明应该与类在同一个头文件内。原创 2023-11-08 14:30:28 · 554 阅读 · 0 评论 -
《C++ Primer》第6章 函数(二)
/ 错误。原创 2023-11-06 15:13:00 · 148 阅读 · 0 评论 -
《C++ Primer》第6章 函数(一)
参考资料:典型的函数定义包括:返回类型( return type )、函数名字、0 个或多个形参( parameter )组成的列表、函数体。其中函数体为语句块。我们通过调用运算符执行函数。调用运算符的形式是一对圆括号,作用于函数或指向函数的指针,圆括号之内是实参(argument)列表,实参用来初始化函数的形参。调用表达式结果的类型就是函数的返回类型。函数调用完成两项工作:实参和形参一一对应,但没有规定求值顺序。实参的类型必须与对应的形参匹配,实参的数量和形参一致。形参列表可以为空,但不能省略:每个形参原创 2023-11-02 15:27:25 · 138 阅读 · 0 评论 -
《C++ Primer》第5章 语句
如果某处一个带有初值的变量位于作用域之外,在另一处该变量位于作用于之内,则从前一处条跳转到后一处是非法行为,因为 C++ 不允许跨过变量的初始化语句直接跳转到该变量的作用域内。int j = 0;// 错误string str;// 错误,str被隐式初始化了;需要注意的是,即使后面并没有用到前面初始化的变量,这种跳转也是不合法的。中可以声明多个对象,但只能有一条声明语句,所以所有对象的类型必须相同。原创 2023-10-08 20:35:32 · 145 阅读 · 1 评论 -
《C++ Primer》第4章 表达式(二)
类类型能定义由编译器自动执行的转换。原创 2023-10-07 20:50:11 · 119 阅读 · 0 评论 -
《C++ Primer》第4章 表达式(一)
参考资料:表达式由一个或多个运算对象组成,对表达式求值将得到一个结果。字面量和变量是最简单的表达式。C++ 定义了若干一元运算符、二元运算符,还有一个三元运算符,函数调用也是一种特殊的运算符。对以一个复杂的表达式,我们首先要理解其运算符的优先级、结合律,以及运算对象的求值顺序。小整型会被提升为大整型。重载运算符时,运算对象的类型和返回值的类型是可以重新定义的,但运算对象的个数、运算符的优先级和结合律是不能改变的。C++ 表达式要么是右值,要么是左值。一个左值表达式的求值结果为一个对象或者一个函数,一般而言,原创 2023-09-27 16:46:03 · 166 阅读 · 0 评论 -
《C++ Primer》第3章 字符串、向量和数组(三)
数组是一种复合类型,声明形如a[d],其中d是数组的维度。维度必须大于 0 且必须是一个常量表达式。默认情况下,数组的元素被默认初始化。如果在函数内部定义了内置类型的数组,则默认初始化会令数组含有未定义的值。定义数组时必须指定数组类型,不允许通过auto推断元素类型。不存在引用的数组。原创 2023-09-14 15:29:31 · 181 阅读 · 0 评论 -
《C++ Primer》第3章 字符串、向量和数组(二)
vector所有标准库容器都可以使用迭代器(iterator)访问其元素。迭代器类似于指针类型,提了对象的间接访问,迭代器可以访问某个元素,也能从一元素移动到另一个元素。迭代器有无效和有效之分,有效的迭代器指向某个元素,或者指向尾元素的下一个位置。原创 2023-09-13 15:53:34 · 138 阅读 · 0 评论 -
《C++ Primer》第3章 字符串、向量和数组(一)
string。原创 2023-09-12 20:28:54 · 158 阅读 · 0 评论 -
《C++ Primer》第2章 变量(二)
C++ 允许用户以类的形式自定义数据结构。由于类体后面可以紧跟变量名(不推荐这么做),所以类定义后面必须加分号。预处理器是用来确保头文件多次包含仍能安全工作的常用技术。预处理器在编译之前运行。预处理器看到#include标记时会用头文件的内容代替#include。头文件保护符依赖于处理变量。预处理变量(NULL就是一个预处理变量)有两种状态:已定义和未定义。define指令把把一个名字定义为预处理变量;#ifdef在变量已定义时为真,#ifndef在变量未定义时为真,一旦检查结果为真,则执行到#endif。原创 2023-09-07 16:30:39 · 337 阅读 · 0 评论 -
《C++ Primer》第2章 变量(一)
变量定义的基本形式:类型说明符,随后紧跟一个或多个变量名(用逗号分隔)。// 错误变量声明的作用是告诉编译器某个实体的存在;定义的作用是在程序中为实体分配内存。定义变量的同时也就声明了这个变量,如果仅仅想要声明一个变量,要使用extern关键字,并且不能显式初始化。变量只能被定义一次,可以被声明多次。原创 2023-09-05 16:32:13 · 173 阅读 · 0 评论 -
《C++ Primer》第1章 开始
C++ 的 IO 控制;注释;原创 2023-09-04 15:34:40 · 247 阅读 · 1 评论