C++Primer(第五版)
C++Primer学习笔记
吃着火锅x唱着歌
这个作者很懒,什么都没留下…
展开
-
C++ Primer 学习笔记 第十九章 特殊工具与技术
某些应用程序对内存分配有特殊需求,如使用new将对象放置在特定的内存空间中,为实现它,应用程序需要重载new和delete。new实际执行步骤:1.new表达式调用operator new(或operator new[])的标准库函数,分批一块足够大的、原始的、未命名的内存空间以便存储特定类型对象(或对象的数组)。2.编译器运行构造函数构造对象。3.对象被分配了空间并构造完成,返回指向它的...原创 2020-05-08 15:36:48 · 287 阅读 · 0 评论 -
C++ Primer 学习笔记 第十八章 用于大型程序的工具
异常处理允许程序中独立开发的部分能够在运行时就出现的问题进行通信并做出相应处理。它能将问题的检测和解决过程分离开来,程序一部分负责检测问题的出现,解决该问题的任务传递给程序的另一部分。通过抛出一条表达式来引发一个异常,抛出的表达式类型和当前的调用链共同决定了哪段处理代码处理该异常。执行throw后,程序的控制权从throw交给与之匹配的catch模块。这可能引起调用链的函数提前退出,和沿着调用...原创 2020-05-03 22:46:12 · 245 阅读 · 0 评论 -
C++ Primer 学习笔记 第十七章 标准库特殊设施
C++11中引入了tuple类型,它类似pair,但它可以有任意多个成员。每个确定的tuple类型的成员数是固定的。我们可以在想将一些数组组合成单一对象,但又不想定义一个新的数据结构时使用。tuple及其伴随类和函数都定义在头文件tuple中。tuple支持的操作:与pair相同,tuple的默认构造函数成员也是将元素值初始化的。定义tuple时,需要指出所有成员类型。tuple只能直接...原创 2020-04-27 17:50:57 · 336 阅读 · 0 评论 -
C++ Primer 学习笔记 第十六章 模板与泛型编程
泛型编程与OOP都能处理在编写程序时不知道类型的情况,但泛型编程在编译时就能火值类型了。模板是泛型编程的基础,它是创建一个类或函数的蓝图或公式。vector为泛型类,find为泛型函数。当多个函数除了参数类型外完全相同,可以用泛型函数将多个函数简化为一个,以下为一个函数模板:template <typename T> int compare(const T &v1, c...原创 2020-04-20 22:58:53 · 288 阅读 · 0 评论 -
C++ Primer 学习笔记 第十五章 面向对象程序设计
面向对象程序设计(OOP)基于三个概念:数据抽象(只暴露类的接口,而如何实现的是不透明的,即类的接口和实现分离)、继承(能实现相似的类型)、动态绑定(忽略相似类型的区别,以统一方式使用它)。继承关系联系在一起的类构成层次关系,在最低层有一个基类,其他类直接或间接地从基类继承而来,称为派生类。基类负责定义所有类的共有成员,而派生类定义各自特有的成员。例子:书店有按原价出售的书,也有打折出售的书...原创 2020-04-14 23:58:55 · 258 阅读 · 0 评论 -
C++ Primer 学习笔记 第十四章 重载运算与类型转换
C++允许我们自定义类类型之间的转换规则。重载的运算符是具有特殊名字的函数,它的名字由operator和运算符构成。重载的运算符函数参数数量与该运算符作用的运算数量一样多,一元运算符有一个参数,二元运算符有两个参数,且二元运算符的左侧运算对象传递给第一个参数,右侧运算对象传递给第二个参数。除了重载的函数调用运算符()外,其他重载的运算符不能有默认实参。如果运算符函数是一个成员函数,则它的左...原创 2020-04-07 17:08:29 · 276 阅读 · 0 评论 -
C++ Primer 学习笔记 第十三章 拷贝控制
拷贝构造函数和移动构造函数定义了当用同类型的另一个对象初始化本对象时做什么;拷贝赋值运算符和移动赋值运算符定义了将一个对象赋予同类型的另一个对象时做什么;析构函数定义了当此类型对象销毁时做什么。这些操作被称为拷贝控制操作。(以上移动构造函数和移动赋值运算符是C++11新标准引进的)当一个类没有定义拷贝控制操作时,编译器会自动定义它们,因此,很多类可以忽略不定义这些操作,然而,这些默认的定义可能会...原创 2020-04-03 22:24:44 · 253 阅读 · 0 评论 -
C++ Primer 学习笔记 第十二章 动态内存
全局对象在程序启动时分配,在程序结束时销毁。局部自动对象在我们进入其所在的程序块时被创建,在离开块时销毁。局部static对象在第一次使用前分配,在程序结束时销毁。除了自动和static对象外,C++还支持动态分配对象,动态分配的对象的生存期与他们在哪里创建是无关的,只有当显式地被释放,这些对象才会被销毁。动态对象的正确释放是编程中极其容易出错的地方,为安全地使用动态对象,标准库定义了两个智能...原创 2020-03-22 21:27:30 · 217 阅读 · 0 评论 -
C++ Primer 学习笔记 第十一章 关联容器
关联容器中的元素是按关键字来保存和访问的,与之相对的顺序容器是按它们在容器中的顺序来保存和访问的。关联容器支持搞笑的关键字查找和访问,两个主要的关联容器类型是map和set。map中的元素是一些键(关键字)值对,键起到索引的作用,值则表示与索引相关的数据。set中每个元素只包含一个关键字(关键字即值),set支持高效的关键字查询操作。标准库提供8个关联容器,它们的不同体现在三个不同维度上:1...原创 2020-03-16 21:54:45 · 2544 阅读 · 0 评论 -
C++ Primer 学习笔记 第十章 泛型算法
标准库容器很小,并未给每个容器添加大量功能,而是提供了一组算法,这些算法大多数都独立于任何特定的容器,这些算法是通用的,或者说是泛型的(generic),可用于不同类型容器和元素。大多数泛型算法定义在头文件algorithm中,头文件numberic中也定义了一些。一般,这些算法不直接操作容器,而是遍历由两个迭代器指定的一个元素范围来进行操作。find:int val = 42;auto...原创 2020-03-14 15:52:26 · 268 阅读 · 0 评论 -
C++ Primer 学习笔记 第九章 顺序容器
元素在顺序容器中的顺序与其加入容器时的位置相对应。关联容器中元素的位置由元素相关联的关键字值决定。所有容器类都共享公共的接口,不同容器按不同方式对其进行扩展。我们基于某种容器所学习的内容也都适用于其他容器。每种容器都提供了不同的性能和功能的权衡。一个容器就是一些特定类型对象的集合。所有顺序容器都提供了快速顺序访问元素的能力,但这些容器在以下方面都有不同的性能折中:1.向容器添加或从容器中删...原创 2020-03-08 21:27:22 · 259 阅读 · 0 评论 -
C++ Primer 学习笔记 第八章 IO库
C++不直接处理输入输出,而是通过一族定义在标准库中的类型来处理IO。这些类型支持从设备读取数据、向设备写入数据的IO操作,设备可以是文件、控制台窗口等。IO库定义了读写内置类型值的操作。此外,一些类,如string,通常也会定义类似的IO操作,来读写自己的对象。之前已经使用的IO库设施:istream类型、ostream类型、cin、cout、cerr、>>运算符、<<...原创 2020-03-04 18:19:56 · 266 阅读 · 0 评论 -
C++ Primer 学习笔记 第七章 类
类的基本思想是数据抽象和封装。数据抽象是一种依赖于接口和实现分离的编程技术,类的接口包括用户所能执行的操作,类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。封装实现了类的接口和实现的分离,封装后的类隐藏了它的实现细节,即类的用户只能使用接口而不能访问实现部分。类要想实现数据抽象和封装,首先需要定义一个抽象数据类型,在抽象数据类型中,由类的设计者负责考虑类的实现过程,...原创 2020-03-02 19:17:39 · 339 阅读 · 0 评论 -
C++ Primer 学习笔记 第六章 函数
函数是一个命名了的代码块,我们通过调用函数执行相应代码。函数可以有0个或多个参数,通常会产生一个结果。一个典型的函数定义包括返回类型、函数名、由0个或多个形参组成的列表和函数体。形参以逗号,隔开,形参列表位于一对圆括号内。我们通过调用运算符()来执行函数,它作用于一个表达式,该表达式是函数或指向函数的指针。圆括号内是一个用逗号隔开的实参列表,我们用实参初始化函数的形参。调用表达式的类型就是函数...原创 2020-02-26 23:47:59 · 308 阅读 · 0 评论 -
C++ Primer 学习笔记 第五章 语句
C++中大多语句以分号;结束。一个表达式,如ival + 5,末尾加上分号就变成了表达式语句。表达式语句的作用是执行表达式并丢弃掉求值结果:ival + 5; //一条没什么用的表达式语句cout << ival; //一条有用的表达式语句最简单的语句是空语句:; //空语句中只含有一个分号如果在程序中某个地方,语法上需要一条语句但逻辑上不需要,此时应该...原创 2020-02-12 22:34:57 · 537 阅读 · 0 评论 -
C++ Primer 学习笔记 第四章 表达式
表达式由运算对象组成,对表达式求值得到一个结果。字面值和变量是最简单的表达式,其结果就是字面值和变量的值。把一个运算符和一个或多个运算对象组合起来可以生成较复杂的表达式。C++定义了一元运算符、二元运算符和三元运算符。作用于一个运算对象的运算符是一元运算符,二三元同理。函数调用也是一种特殊的运算符,它对运算对象的数量没有限制。一些符号既可以作为一元运算符也可以作为二元运算符,比如*。它是一元...原创 2020-01-17 14:33:01 · 326 阅读 · 0 评论 -
C++ Primer 学习笔记 第三章 字符串、向量和数组
using声明后就可以不使用作用域操作符了,如:std::cin;等价于:using std::cin; //声明后再用cin时就不用加前缀了cin;每个using声明引入命名空间中的一个成员,但也可以指定变量所在的命名空间:using namespace std;头文件不应包含using声明,因为头文件内容会拷贝到所有引用了它的文件中,那么每个使用了该头文件的文件都会有这...原创 2020-01-11 20:03:48 · 279 阅读 · 0 评论 -
C++ Primer 学习笔记 第二章 变量和基本类型
C++是一种静态数据类型语言,它的类型检查发生在编译时。基本内置类型:C++定义了一套包括算数类型和空类型在内的基本数据类型。算数类型:整型(字符、整型数、布尔值)和浮点数。空类型:不对应具体的值,仅用于特殊场合,常见的有函数不返回任何值时用空类型作返回类型。算数类型的尺寸在不同机器上有所差别,C++标准规定了尺寸的最小值,同时允许编译器赋予这些类型更大的尺寸。一个char的空间应确保可...原创 2020-01-07 20:36:01 · 369 阅读 · 0 评论 -
C++ Primer 学习笔记 第一章 开始
main函数的返回类型必须为int型。一种类型不仅定义了数据元素的内容,还定义了这类数据上可以进行的运算。IDE(Integrated Developed Environment)集成开发环境。根据编译器不同,常见源文件后缀有:.cc/.cxx/.cpp/.cp/.C命令行运行源文件命令:GNU:g++微软Visual Studio 2010:c1C++并未定义IO语句,其包含一个标...原创 2019-12-26 21:33:44 · 130 阅读 · 0 评论