![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【C++ Primer】学习草稿
行而尚学
一步一步 迈向未来
展开
-
5.1 - 5.12 表达式
本章大意 介绍了表达式以及操作符相关的一些基本定义,如优先级,结合性,类型转换,以及一些操作符的具体含义。 说明 这部分属于面向过程部分,已有了基本掌握,故不做细节摘录以及课后习题。将精力放在后面的学习上。原创 2013-05-02 15:26:55 · 383 阅读 · 0 评论 -
2.6 typedef名字
本节大意: 介绍了typedef关键字。 细节摘录: 1. 其目的在于给已经存在了的数据类型定义同义词 课后习题: 无原创 2013-04-22 09:07:28 · 327 阅读 · 0 评论 -
2.5 引用
本节大意: 介绍了引用的相关知识。 细节摘录: 1. 引用就是变量的别名。 2. 非const引用必须要用相应对象的变量名初始化。 3. const引用则可以用右值。 课后习题: 较为简单 略过。原创 2013-04-22 09:04:53 · 329 阅读 · 0 评论 -
2.4 const限定符
本节大意: const关键字的说明。 细节摘录: 1. const变量必须先初始化。 2. 全局const变量默认为局部,非const变量默认为全局。 课后习题: 1. 100应当用一个常变量来表示,否则会成为魔数。 2. a不对没有初始化,因为常变量不可改动,因此必须在定义的时候给出初始化式子。 b.合法 c.不合法,sz是不能够自加的。原创 2013-04-22 08:55:56 · 332 阅读 · 0 评论 -
2.3 变量
本节大意: 讲述了如何定义并使用一个变量,变量的命名规范,初始化的方法,变量的声明与定义,变量的作用域。 细节摘录: 1. 变量定义:可以操作的有名字的存储区。 2. 区分两种初始化方法 -- 赋值初始化和直接初始化。 3. 定义用于给变量分配空间,声明向程序表明变量的名字和类型。定义一定是声明,但声明不一定是定义(仅当声明式有右值它同时具有定义效果)。在多个文件中使用的变量,其原创 2013-04-19 16:36:10 · 370 阅读 · 0 评论 -
2.1 基本内置类型
本节大意: 介绍了几种数据类型以及它们在机器中的表示,范围,溢出处理。 细节摘录: 1. C++类型标准只规定了所用空间的最小值,事实上每种实现都比这个要求更大。 2. 整型溢出后采用取摸截取处理。 3. 浮点型一般用double类型。 课后习题: 1. 表示范围不同,一般来说满足short 2. 一个表示有符号的整数,一个表示无符号的整数。前者的表示范围将近是后者2倍。原创 2013-04-19 09:55:14 · 397 阅读 · 0 评论 -
1.4 控制结构
本节大意: 介绍了几种控制结构,while,for,if,以及自增,自减运算符,进一步丰富了之前的例子程序。 细节摘录: 1. 需要读入未知数目的输入时,可以用如下语句“ while (std::cin >> 变量名) "。 课后习题: 均为面向过程的经典编程题,用好控制结构易得答案,略过。原创 2013-04-18 16:57:42 · 325 阅读 · 0 评论 -
1.3 关于注释
本节大意: 介绍几种经典的注释方法,以及指出容易出现的问题。 细节摘录: 1. 不要嵌套注释。 课后习题: 1. 下面是个有嵌套注释的代码: 可以看出编辑器给出了警告。当执行编译时,报错如下: 2. 根据注释对一定是以/*开始,以*/结尾原则,不难得出只有2是合法的。原创 2013-04-18 16:44:25 · 345 阅读 · 0 评论 -
1.1 编写简单的C++程序
本节大意 讲解了一个基本框架程序,并分析了程序编译相关的一些约定。这些约定有源文件的命名规范,命令行编译程序的方法,以及如何取得程序的返回值。 细节摘录 1. 源文件文件名的后缀不但表示该文件是程序源文件,而且也表示该源文件是用什么语言编写的。但具体命名细则依赖于具体的编译器。 2. 用命令行编译程序的方法对于不同操作系统,不同编译器来讲,方法也是不同的。 3. Linux/Unix下取原创 2013-04-15 09:45:29 · 437 阅读 · 0 评论 -
3.2 标准库string类型
本章大意 讲述了标准库string类型的相关知识 细节摘录 1. 存储string的size操作结果的变量必须为string::size_type,不要给int。 课后习题 1. 默认构造函数是指让构造一个对象且并不给出参数时系统自动执行的构造函数。 2. 经典的三种赋值方法如下: 3.s和s2的值均为空 4. 每次读取一行的代码: 每次读取一个单词的代码:原创 2013-04-23 10:25:04 · 378 阅读 · 0 评论 -
15.6
本节大意 介绍了继承关系类对象存放于容器中的一些问题 细节摘录 1. 对象并不具有多态性(其引用或者指针才有) 2. 派生类对象塞进容器后只有基类那部分存在,其他被切掉。 3. 唯一可行的方法是放指针,但是就会带来一系列的指针管理问题。 课后习题 1. 2. 略 3. 没有差异。原创 2013-06-05 16:01:52 · 358 阅读 · 0 评论 -
15.5
本节大意 分析了派生类中的一些名字冲突问题 细节摘录 1. 名字如果相同 派生类会屏蔽掉基类。如果要用基类版的必须显示调用。 2. 派生类函数如果要重载基类中的函数,则所有的基类函数都要被重载一边(可以用using关键字提高效率)。 课后习题 1. 一个是动态绑定指针 一个是复制函数的作用 2. a错 只有返回值可以为派生类引用 b对 cd都是错的,覆盖了基类的虚函数。原创 2013-06-05 15:25:05 · 380 阅读 · 0 评论 -
15.4
本节大意 面向对象编程中的构造函数和复制控制 细节摘录 1. 如果某些类只希望派生类使用某个构造函数,可将其声明为protected。 2. 一个类的构造函数中只能初始化它的直接基类。 3. 当类发生重构,所有使用这些类的代码都要重新编译。 4. 请尊重基类接口,用基类的构造函数初始化基类。 5. 有指针成员的类要添加复制控制机制(3 rule) 6. 正如我们在派生类中调用基原创 2013-06-03 16:28:27 · 396 阅读 · 0 评论 -
15,1
本节大意 介绍了面向对象编程基本思想 细节摘录 1. 面向对象的两个灵魂概念继承,动态绑定。 2. 通过继承而相关联的类型为多态类型,许多情况下可以交换的使用派生类或基类的多种形态。 3. 我们能够编写程序(函数)使用继承层次中任意类型的对象,无需关心对象的具体类型。 4. 动态绑定两点要求1 用引用或者指针做参数 2. 被调用的函数是虚函数 课后习题 无原创 2013-05-30 10:08:25 · 375 阅读 · 0 评论 -
2.7 枚举
本节大意: 介绍了枚举类型。 细节摘录: 1. 枚举成员值可以不唯一。 2. 不能改变枚举成员的值。 3. 每一个enum就定义了一个新的类型。 课后习题: 无原创 2013-04-22 09:13:51 · 374 阅读 · 0 评论 -
2.8 类类型
本节大意: 介绍了类类型的基本框架。 细节摘录: 1. 类变量的定义区别于一般变量,它是在构造函数里实现初始化而不是声明时。 2. struct和class的区别仅仅在于默认变量的访问级别是否为私有。 课后习题: 1. 反馈很好懂: 2. 对于变量来讲private型只能被类的内部函数访问,而public型则可以被其他类自由进行调用。原创 2013-04-22 09:23:23 · 325 阅读 · 0 评论 -
2.9 编写自己的头文件
本节介绍: C++中的头文件思想,多文件编程的思想及其内容分配格局。 细节摘录: 1. const变量和内联函数也可以放在头文件中 2. 头文件保护符格式: 课后习题: 1. ab是定义 cd是声明 2. a放源文件中,b放头文件中,c放源文件中,d放头文件中。原创 2013-04-22 09:51:54 · 429 阅读 · 0 评论 -
4.4 多维数组
本节大意 讲述了多维数组的相关知识 细节摘录 无 课后习题 略原创 2013-04-26 09:30:43 · 320 阅读 · 0 评论 -
4.2 指针的引入
本节大意 回顾了C语言中指针的相关知识 细节摘录 1. C++使用迭代器替代指针,使用string类型取代C风格字符串。 2. 指针和引用的区别:a. 指针可以为空,但引用永远指向某个对象 b. 引用一经初始化,就必须始终指向某个对象。 3. 指针减法操作的结果的类型是ptrdiff_t。 4. 指针和数组具有很大的相似性 5. 区分常量指针和指向常量的指针 课后习题 略原创 2013-04-26 08:51:55 · 418 阅读 · 0 评论 -
6.1 - 6.14 语句
本章大意 学习C++中的各种流程控制语句 细节摘录 1. 异常处理机制 2. 使用预处理器进行调试 说明 面向过程部分,不做过多纠结。原创 2013-05-02 16:17:42 · 309 阅读 · 0 评论 -
4.3 C风格字符串
本节大意 对比讲述了C和C++中字符串的处理 细节摘录 1. C++中new和delete的语法格式 2. c_str函数可以将string转换成C风格字符串(但是是常量型) 3. 用数组初始化vector的方法要掌握 课后习题 这部分略原创 2013-04-26 09:17:54 · 386 阅读 · 0 评论 -
8.1 - 8.5 标准IO库
本章大意 介绍了标准IO库即其相关的使用 细节摘录 0. 简单的IO控制流层次 1. 复制,赋值均不能够为IO对象 2. 三种刷新缓冲区的方法 a flush ends endl操纵符 b unitbuf操纵符 c 将输入和输出绑定在一起 3. 文件输入输出标准步骤 4. 按模式打开文件 5. 字符串IO库 课后习题 1. 往文件,字符串中写入数据。 2. 形参和原创 2013-05-06 10:54:59 · 395 阅读 · 0 评论 -
7.1 - 7.9 函数
本章大意 主要讲解了C++中关于函数的各项机制 细节摘录 1. 使用引用型参数的原因:a 复制太占空间 b 需要修改实参 2. 接1,如果目的在于a,那么最好声明为const 3. 主函数带参格式int main(int argc, char ** argv) {...} 4. 不可返回局部对象的引用或者指向局部对象的指针 5. 内联函数要放在头文件里 6. const成员函数原创 2013-05-06 09:49:47 · 370 阅读 · 0 评论 -
3.5 标准库bitset类型
本节大意 介绍了位容器bitset 细节摘录 1. 如果用string类型初始化bitset,那么转化方向是相反的。 课后习题 1. 64位的32的二进制式子 2. 32位的1010101(高位补0) 3. 8位的字符串二进制式子(转化方向相反) 4. 不会做原创 2013-04-25 09:23:12 · 346 阅读 · 0 评论 -
3.4 迭代器简介
本节大意 介绍了C++中迭代器以及其基本使用 细节摘录 1. 迭代器的解引用操作结果为左值 2. 任何改变迭代器长度的操作都会使迭代器失效 课后习题 1. 略 2.3. 实现代码: #include #include using namespace std; int main() { vector v(10); int i=0; for (vector:原创 2013-04-25 09:01:11 · 440 阅读 · 0 评论 -
3.3 标准库vector类型
本节大意 介绍了标准库类型vector 细节摘录 1. 几种不同的初始化方式要掌握 2. 有些函数应该动态调用 3. 谨慎对待下标操作(一定要确定下标对应元素存在) 课后习题 1. a合法 b不合法 c合法 2. 0 1 10 0 1 10 3.4. 过于复杂暂不完成 5. 不合法的,因为使用了本不存在的元素的下标。 6. 最好就是vector (10, 42)原创 2013-04-24 09:49:40 · 345 阅读 · 0 评论 -
4.1 数组
本节大意 回顾了C语言中的数组的使用方法并和vector进行了系统的对比 细节摘录 无 课后习题 1. 几种情况都很极端,不会判断。 2. 前两组是空的,后两组是未定以的。 3. bcd都是错的 4. 略 5. 主要是下标难以约束,容易造成缓冲区溢出,而且一些操作也比较不够人性化(比如不能两个数组直接赋值)。 6. 错在序号错位了 7. 数组实现很简单,vector实原创 2013-04-25 15:50:01 · 397 阅读 · 0 评论 -
3.1 命名空间的using声明
本节大意 讲述了关键字using的使用 细节摘录 1. 一个using声明一次只能作用于一个命名空间,但一个源代码文件中可以使用多个using声明。 2. 头文件中不要using了。 课后习题 1. 改写代码:原创 2013-04-23 09:10:25 · 400 阅读 · 0 评论 -
2.2 字面值常量
本节大意: 介绍了C++中几种主要内置类型【字面值】的表示方法。 细节摘录: 1. 06表示八进制的6,0x6表示16进制的6。(数字0)。 2. 浮点型的字面表示比较多且复杂。 3. 使用“ \ ”来实现多行字面值时,要注意反斜线必须是该行的尾字符,而且后继行行首的任何字符(包括空格制表符)都将成为该多行字面值的一部分。 课后习题: 略,均为考察字符,整型,浮点型的字面值表原创 2013-04-19 10:08:59 · 412 阅读 · 0 评论 -
1.5 类的简介
本节大意: 在原来程序的基础之上,引入了类,真正开始了C++编程。大致介绍了类的结构,并用类的思路对原来程序进行了改造,使之成为真正的C++风格程序。 细节摘录: 1. C++设计的主要焦点就在于使所定义的类使用起来和内置类型一样自然,一切特性和技术似乎都是围绕着这个目的展开的。 课后习题: 1. 使用自定义头文件;使用类;读入未知数目对象。 代码: 执行测试: 2.原创 2013-04-19 09:31:53 · 346 阅读 · 0 评论 -
1.2 初窥输入输出
本节大意: 对上节的程序进行了扩展,增加了头文件和输入输出功能。使例子程序像真正的C++程序靠拢。 细节摘录: 1. C++用“流”的思想处理输入输出,“流”是指要从某种设备上读出或写入的字符序列。 2. 可以连续使用>的理论依据 -- 输入输出操作的返回是流本身。 3. endl叫做操纵符,除了可以换行,还有刷新缓冲区的功能。 4. 定义变量前一定要初始化。 课后习题 1原创 2013-04-18 16:35:12 · 409 阅读 · 0 评论 -
15.2
本节大意 介绍了一些基类,派生类之间的关系机制。 细节摘录 1. 除了构造函数,所有函数都可以声明为虚。 2. virtual关键字只能在内部声明中出现。外部定义时就不要出现了。 3. protected能让子类访问基类,反过来不成立。 4 派生类的虚函数声明必须和基类一致。只有一种情况例外,见P477. 5. 一旦函数被声明为虚函数,它就永远都是。 6. 用作基类的类必须是已原创 2013-05-30 10:55:05 · 385 阅读 · 0 评论 -
11.2
本节大意 较为详细的介绍了几种具体的算法 细节摘录 1. 使用算法记得包含头文件(主要有两种) 2. 使用插入迭代器记得加头文件名 3. 通常,参数迭代器要加上参数。 课后习题 1. #include #include #include #include #include using namespace std; int main() { vector原创 2013-05-16 11:08:28 · 348 阅读 · 0 评论 -
12.6
本节大意 介绍了面向对象编程中的static机制 细节摘录 1. 使用static的好处:a 避免和其他全局事物产生命名冲突 b 封装性 c 可读性 2. 访问方式 类::static对象名 3. static函数的限制 a 成员不能用this b 不能声明为const,也没必要声明。 c 不能声明为虚函数 4. static数据成员必须在类的外部定义一次且只能定义一次 5.原创 2013-05-23 21:45:30 · 436 阅读 · 0 评论 -
13.1
本节总结 介绍了复制构造函数的使用方法以及需要使用的情况 细节摘录 1. 复制情况下,操作过程是系统先创建一个临时对象(使用构造函数),然后再用复制构造函数复制到左边。 2. 如果要使用复制构造函数,那么构造函数就不能声明为explicit 3. 函数,容器,数组中都涉及到了复制函数机制。 4. 两种情况下一般要用到复制函数:1.有成员是指针 2. 复制时要做一些特定工作 5.原创 2013-05-24 11:28:31 · 346 阅读 · 0 评论 -
9.3
本节大意 本节是一个大节,详细讲述了各种顺序容器的使用。 细节摘录 1. begin和end放回值最好不要存放,因为一旦进行插入或者删除操作,它们就将作废。 2. 课后习题 1. 不会,暂留。 2. list::value_type 3. 增加一个标识符即可 4. 题目有问题 5. 不用判断了,肯定不同。因为类型都不同。事实上编译都不能通过。 6. 容器类型一定要相原创 2013-05-10 10:02:37 · 347 阅读 · 0 评论 -
9.2
本节大意 介绍了迭代器的基本使用,以及关于其范围的讨论。 细节摘录 1. 算数和关系运算符是vector和deque容器所特有的。 2. 迭代器范围的末端是最后一个元素的下一个元素,而不是最后一个元素。 3. 要特别小心使迭代器失效的操作。 课后习题 1. 错在list容器的迭代器不支持比较操作。 2. 判断容器是否为空。 3. #include #include原创 2013-05-09 14:55:14 · 342 阅读 · 0 评论 -
12.5
本节大意 介绍了一种重要的机制 - 友元 细节摘录 1. 重载函数集中,每个希望“友”的函数都要声明为友。| 课后习题 1. 能够访问某个类的函数就叫做该类的友元函数,类同理。 2. 目前还没遇到过 3. #include #include using namespace std; class A { private: int a; public: A(int原创 2013-05-22 11:00:00 · 384 阅读 · 0 评论 -
10.1
内容大意 介绍了类型pair并介绍了它的使用。 细节摘录 1. 该类型包含于utility头文件中。 课后习题 1. #include #include #include #include using namespace std; int main() { pair temp; string a; int b; vector > v; while (ci原创 2013-05-13 08:41:21 · 352 阅读 · 0 评论 -
9.1
本节大意 掌握容器的定义,还有各种初始化的方法。 细节摘录 1. 容器的本质是类模板,故定义的语法都很像。 2. 使用容器初始化时,类型必须相同;而使用迭代器时,可以不同。 3. 指针可以视作迭代器,带入初始化结构式。 4. 以接受容器大小为参数的初始化式只能用于顺序容器。 5. 容器的元素不能是引用。 6. 容器的元素是类时,如果类没有默认构造函数,那么就不能用默认的初始化方原创 2013-05-09 08:43:13 · 370 阅读 · 0 评论