
C++ Primer
书籍:C++Primer中文版(第5版)
北冥有鱼wyh
当容颜不再,唯学识沉淀;
当看清远方,唯家人、知识与我长伴。
展开
-
C++ Primer:第15章 面向对象程序设计
C++ Primer:第15章 面向对象程序设计第15章 面向对象程序设计15.1 OOP:概述15.2 定义基类和派生类1. 定义基类2. 定义派生类3. 类型转换与继承15.3 虚函数15.4 抽象基类15.5 访问控制与继承15.6 继承中的类作用域15.7 构造函数与拷贝控制15.8 容器与继承15.9 文本查询程序再探第15章 面向对象程序设计15.1 OOP:概述面向对象程序设计的核心思想是数据抽象、继承和动态绑定。数据抽象可将类的接口与实现分离,继承可定义相似的类型并对相似关系建模.原创 2020-08-17 10:43:34 · 494 阅读 · 0 评论 -
C++ Primer:第14章 重载运算与类型转换
第14章 重载运算与类型转换要求运算符可以重载+ - * / % ^ \| ~ = ++ --+= -= *= /= %= ^= \|= &=! < > <= >= == != << >> <<= >>=-> ->* [] () new new[] delete delete[]不建议重载, & && \|\|不能重载:: .* . ?:必须是成员原创 2020-07-28 14:19:50 · 380 阅读 · 0 评论 -
C++ Primer:第13章 拷贝控制
第13章 拷贝控制拷贝控制操作:拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符、析构函数。当类中没有声明构造函数时,编译器会在其需要时生成合成默认构造函数。当类中没有定义拷贝构造函数时,编译器生成合成拷贝构造函数。合成拷贝赋值运算符、合成析构函数与合成拷贝构造函数类似。当类中没有自定义拷贝控制成员,且每个非static数据成员都可以移动时,编译器才会合成移动构造函数或移动赋值运算符。若一个类需要析构函数,则几乎肯定需要拷贝构造函数、拷贝赋值运算符;若一个类需要拷贝构造函数,则几乎肯定需.原创 2020-07-23 09:00:40 · 485 阅读 · 0 评论 -
C++ Primer:第12章 动态内存
C++ Primer:第12章 动态内存第12章 动态内存12.1 动态内存与智能指针12.1.1 shared_ptr类12.1.2 直接管理内存1. new2. delete12.1.3 shared_ptr和new结合使用12.1.4 智能指针和异常12.1.5 unique_ptr12.1.6 weak_ptr12.2 动态数组12.2.1 new和数组12.2.2 allocator类12.3 使用标准库:文本查询程序第12章 动态内存全局对象在程序启动时分配,在程序结束时销毁;局部自动对原创 2020-05-14 11:25:21 · 384 阅读 · 0 评论 -
C++ Primer:ifstream调试时出错,但运行时正确?
1. 背景 程序运行和调试工具:vscode。 当前工作目录(E:\VSCode\test\10)下含两个文件夹,其中.vscode是vscode的配置文件,test是测试程序1.cpp所在文件夹。 现通过1.cpp打开1.txt,发现程序运行时可以打开文件,而调试时无法打开文件。// 1.cpp// 编译环境:MinGW#include <iostream>#include <fstream>#include <string>using nam原创 2020-05-13 10:11:08 · 1000 阅读 · 1 评论 -
C++ Primer:销毁对象与释放内存的关系?
1. 背景 最近看到C++ Primer第12章动态内存的相关内容,其中频繁出现销毁对象和释放内存,故疑惑两者之间的关系?销毁对象时不会释放对象所占的内存吗?2. 分析与总结对象的含义: 在C++中,对象通常是指一块能存储数据并具有某种类型的内存空间。 按位置来区分,对象可分为全局对象、局部自动对象、局部static对象、动态分配对象等。 按类型来区别,对象还可分为内置类型、...原创 2020-04-30 17:24:33 · 2036 阅读 · 0 评论 -
C++ Primer:判断shared_ptr是否为空智能指针?
一、背景 最近学习到动态内存与智能指针,发现使用智能指针与普通指针类似:对指针解引用或访问指针指向对象的成员前,需先确定指针不是空指针。二、判断方法源程序:// 编译环境:MinGW#include <iostream>#include <memory>using namespace std;int main(){ shared_ptr<...原创 2020-04-29 08:42:37 · 29208 阅读 · 1 评论 -
C++ Primer:第11章 关联容器
C++ Primer:第11章 关联容器第11章 关联容器11.1 使用关联容器11.2 关联容器概述11.2.1 定义关联容器11.2.2 关键字类型的要求11.2.3 pair类型11.3 关联容器操作11.3.1 关联容器迭代器11.3.2 添加元素11.3.3 删除元素11.3.4 map的下标操作11.3.5 访问元素11.3.6 一个单词转换的map11.4 无序容器第11章 关...原创 2020-04-27 16:41:19 · 479 阅读 · 0 评论 -
C++ Primer:可以将严格弱序看作“小于等于”?
1. 背景 在阅读到C++Primer中文版(第5版)的有序容器的关键字类型(P378)时, 发现书中是将严格弱序看作“小于等于”,而且在其列出的基本性质中还写道:两个关键字不能同时“小于等于”对方。 虽然已经对小于等于加引号表示不是真的,但个人觉得非常别扭,其说法也是矛盾的,例如k1<=k2,那k2<=k1应该是可行的。原文:有序容器的关键字类型 可以向一个算法提...原创 2020-04-24 11:02:39 · 1108 阅读 · 1 评论 -
C++ Primer:第10章 泛型算法
C++ Primer:第10章 泛型算法10.1 概述10.2 初始泛型算法10.2.1 只读算法(find、count、accumulate、equal)10.2.2 写容器元素的算法(fill、copy、replace)10.2.3 重排容器元素的算法(sort、unique)10.3 定制操作10.3.1 向算法传递函数10.3.2 lambda表达式10.3.3 lambda捕获和返回1...原创 2020-04-08 10:57:02 · 514 阅读 · 0 评论 -
C++ Primer:对begin()的引用
1. 问题// 编译环境:MinGW#include <iostream>#include <vector>using namespace std;int main(){ vector<int> v{1, 2, 3}; vector<int>::iterator i1 = v.begin(); //问题:为何i2...原创 2020-04-05 13:32:52 · 317 阅读 · 0 评论 -
C++ Primer:equal与strcmp(练习10.5解答)
1. c1 == c2与strcmp(c1, c2)的区别// 编译环境:MinGW#include <iostream>#include <cstring>using namespace std;int main(){ char c1[] = {"123"}, c2[] = {"123"}; if (c1 == c2) { ...原创 2020-04-02 13:45:40 · 252 阅读 · 0 评论 -
C++ Primer:第9章 顺序容器
第9章 顺序容器9.1 顺序容器概述1. 顺序容器类型顺序容器描述vector可变大小数组string与vector类型,但专门用于保存字符deque双端队列list双向链表forward_list单向链表array固定大小数组2. 选择容器的基本原则除非有很好的理由选择其它容器,否则应使用vector。若程序要求随...原创 2020-03-27 10:54:31 · 337 阅读 · 0 评论 -
C++ Primer:string构造函数总结
1. string的构造函数string的构造函数描述string s默认构造函数,元素个数为空string s(n,‘a’)s是由n个’a’组成的字符串string s{‘a’,‘b’,…}将初始化列表拷贝到sstring s(cp)string s(cp,n)将cp指向的数组拷贝到s,数组必须以空字符结尾将从cp开始的n个字符拷贝到sst...原创 2020-03-28 16:22:03 · 240 阅读 · 0 评论 -
C++ Primer:容器大小相关函数
1. 容器大小相关函数容器大小相关函数描述c.size()c的元素个数c.max_size()c可保存的最大元素个数c.resize(n)c.resize(n,t)调整c的元素个数为n,对于多出的元素进行值初始化调整c的元素个数为n,对于多出的元素使用t来进行初始化c.capacity()不重新分配内存空间的话,c可保存的元素个数只适用于vecto...原创 2020-03-28 15:05:19 · 422 阅读 · 0 评论 -
C++ Primer:vector删除元素时迭代器失效问题
1. 删除尾元素#include <iostream>#include <vector>using namespace std;//输出void show(vector<int> &v);//迭代器vector<int>::iterator i1, i2, i3, i4;int main(){ vector<...原创 2020-03-28 08:29:21 · 2126 阅读 · 0 评论 -
C++ Primer:vector插入元素时迭代器失效问题
vector插入元素时迭代器失效问题1. capacity()不足,在末尾添加元素2. capacity()充足,在末尾添加元素3. capacity()充足,在中间添加元素4. capacity()充足,在首部添加元素5. 总结1. capacity()不足,在末尾添加元素#include <iostream>#include <vector>using nam...原创 2020-03-27 15:24:11 · 3065 阅读 · 0 评论 -
C++ Primer:vector、string、list、forward_list、deque、array的swap
1. vector的swap(list、forward_list、deque与之类似)#include <iostream>#include <vector>using namespace std;void show(int i, vector<int> &v1, vector<int> &v2, vector<int...原创 2020-03-26 08:40:20 · 197 阅读 · 0 评论 -
C++ Primer:第8章 IO库
C++Primer:第8章总结第8章:IO库8.1 IO类IO库类型和头文件IO对象无法拷贝赋值条件状态管理输出缓冲8.2 文件输入输出fstream特有的操作使用文件流对象文件模式8.3 string流stringstream特有操作第8章:IO库8.1 IO类IO库类型和头文件头文件类型iostreamistream,wistream从流读取数据ostream,...原创 2020-03-19 15:04:44 · 363 阅读 · 0 评论 -
C++ Primer:cin的用前检查(练习8.11解答)
1. 背景本节程序:#include <iostream>#include <sstream>#include <string>#include <vector>using namespace std;struct PersonInfo{ string name; vector<string> phone...原创 2020-03-19 17:07:02 · 270 阅读 · 0 评论 -
C++ Primer:第7章 类
C++ Primer:第7章总结第7章 类7.1 定义抽象数据类型7.2 访问控制与封装7.3 类的其它特性7.4 类的作用域7.5 构造函数再探7.6 类的静态成员第7章 类7.1 定义抽象数据类型类的基本思想:数据抽象、封装。数据抽象:一种依赖于接口和实现分离的编程及设计技术。接口包括用户所能执行的操作;实现包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。封装...原创 2020-03-15 10:53:54 · 351 阅读 · 0 评论 -
C++ Primer:static const与static constexpr的类内数据成员初始化(练习7.58解答)
1. 背景 在C++Primer 中文版(第5版)第270页中,对静态数据成员的类内初始化作如下说明:我们可以为静态成员提供const整数类型的类内初始值,不过要求静态成员必须是字面值常量类型的constexpr。 上面的句子不好理解。故找到如下对应的英文版说明:we can provide in-class initializers for static members th...原创 2020-03-18 17:11:48 · 16703 阅读 · 7 评论 -
C++ Primer:字面值常量类调用函数错误(p268书中示例报错)
C++Primer:字面值常量类调用函数错误(p268书中示例报错)1. 背景2. 基础相关知识3. 分析与解答1. 背景 在阅读到C++Primer第268页时发现其示例编写好后程序报错。#include <iostream>using namespace std;class Debug{public: constexpr Debug(bool b = tr...原创 2020-03-03 16:05:10 · 291 阅读 · 1 评论 -
C++ Primer:数据成员的初始化和赋值
1. 默认初始化#include <iostream>#include <string>using namespace std;class A{public: int m; string s;};int main(){ A a1; cout << "----------------------------" ...原创 2020-03-15 09:31:26 · 693 阅读 · 0 评论 -
C++ Primer:返回*this的成员函数
C++:返回*this的成员函数1. 背景2. 实例与分析2.1 实例12.2 实例22.3 实例31. 背景当定义的函数类似于某个内置运算符时,应令该函数的行为尽量模仿这一运算符。内置的赋值运算符将左侧运算对象当成左值返回,故combine函数(+=)需返回引用类型(*this)。display函数用于打印类的数据成员,并未修改类,故display函数应是常量成员函数。常量对象,以...原创 2020-02-28 16:52:46 · 455 阅读 · 0 评论 -
C++ Primer:类内成员的名字查找
#include <iostream>#include <string>using namespace std;typedef double Money;string bal;class Acount{public: Money balance() { return bal;//bal的类型? }private:...原创 2020-03-14 15:26:37 · 324 阅读 · 0 评论 -
C++ Primer:类声明、类定义、类实现、类使用
#include <iostream>using namespace std;//类声明class A;//类定义class A{ int m; //数据成员声明 int f1(); //成员函数声明 int f2(); //成员函数声明及定义,类实现 { return 1; }};//类实现int...原创 2020-03-14 13:32:18 · 527 阅读 · 0 评论 -
C++ Primer:第6章 函数
C++ Primer:第6章总结第6章 函数6.1 函数基础6.2 参数传递6.3 返回类型和return语句6.4 函数重载6.5 特殊用途语言特性6.6 函数匹配6.7 函数指针第6章 函数6.1 函数基础基本内容:函数定义组成:返回类型,函数名,形参列表,函数体。主调函数和被调函数,形参和实参,函数返回类型。局部变量:形参和函数体内部定义的变量。自动对象:只存在于块执行期间的...原创 2020-01-21 09:40:20 · 265 阅读 · 0 评论 -
C++ Primer:形参与const
1. 形参本身是const程序调用函数时会用实参来初始化形参,若形参本身是const,顶层const会被忽略。故不能通过判断形参本身是否是const来区分函数。#include <iostream>using namespace std;class A{public: //形参类型是int int f(int i) { cout...原创 2020-03-16 14:27:08 · 269 阅读 · 0 评论 -
C++ Primer:重载函数的注意事项
1. 形参名字#include <iostream>using namespace std;class A{public: //形参是i int f(int i) { cout << "int f(int i)" << endl; return 0; } //形参是n ...原创 2020-03-16 10:38:15 · 123 阅读 · 0 评论 -
C++ Primer:第5章 语句
C++ Primer:第5章总结第5章 语句5.1 简单语句5.2 语句作用域5.3 条件语句5.4 迭代语句5.5 跳转语句5.6 try语句和异常处理第5章 语句5.1 简单语句基本内容:表达式语句,空语句,复合语句(块),空块。备注:空语句使用时需加注释表明有意忽略,不要漏写或多写分号。块不以分号结尾,struct定义,class定义,do while语句需以分号结尾。...原创 2020-01-17 09:33:41 · 277 阅读 · 0 评论 -
C++ Primer:第4章 表达式
C++ Primer:第4章总结第4章:表达式4.1 基础4.2 算术运算符4.3 逻辑和关系运算符4.4 赋值运算符4.5 递增和递减运算符4.6 成员访问运算符4.7 条件运算符4.8 位运算符4.9 sizeof运算符4.10 逗号运算符4.11 类型转换4.12 运算符优先级表第4章:表达式4.1 基础基本内容:一元运算符、二元运算符、三元运算符、函数调用(特殊的运算符)。运算...原创 2020-01-15 15:00:27 · 355 阅读 · 0 评论 -
C++ Primer:表达式运算顺序(练习4.33分析解答)
@[TOC](C++ Primer:表达式运算顺序(练习4.33分析解答))1. 问题练习4.33:根据4.12节中的表(第147页)说明下面这条表达式的含义。someValue ? ++x, ++y:--x, --y2. 分析 表达式运算顺序的3个决定因素:运算符的优先级,运算符的结合律,运算对象的求值顺序。优先级:前置递增运算符(++) = 前置递减运算符(–) >...原创 2020-01-15 10:29:28 · 868 阅读 · 0 评论 -
C++ Primer:第3章 字符串、向量和数组
C++ Primer:第3章总结第3章 字符串、向量和数组3.1 命名空间的using声明3.2 标准库类型string3.3 标准库类型vector3.4 迭代器介绍3.5 数组3.6 多维数组第3章 字符串、向量和数组3.1 命名空间的using声明基本内容:作用域操作符(::):编译器从操作符左侧名字所示的作用域中寻找右侧名字。using声明(using namespace::n...原创 2020-01-13 14:18:29 · 230 阅读 · 0 评论 -
C++ Primer:数组隐式转换成指针的5种例外。
C++ Primer:数组隐式转换成指针的5种例外。1. 背景2. 例外2.1 decltype关键字2.2 取地址符(&)2.3 sizeof关键字2.4 typeid关键字2.5 数组的引用1. 背景 在大多数包含数组的表达式中,数组自动转换成指向数组首元素的指针。#include <iostream>using namespace std;int main...原创 2020-01-17 16:11:15 · 824 阅读 · 1 评论 -
C++ Primer:string、vector和数组初始化总结
1. string初始化#include <iostream>#include <string>using namespace std;// 函数外部默认初始化string s1_0;int i1_0;int main(){ // 函数内部默认初始化 string s1_1; // string是类,类各自绝对决定初始化方式,如strin...原创 2020-01-13 10:09:35 · 3407 阅读 · 0 评论 -
C++ Primer:常见类型的初始化
C++:常见类型的初始化1. 背景2. 初始化1. 背景常见类型包含内置类型整型(布尔型,字符型,整型)、浮点型复合类型引用、指针、数组标准库类型string、vector2. 初始化整型和浮点型初始化时会自动进行类型转换。#include <iostream>using namespace std;int main()...原创 2020-01-19 15:26:13 · 333 阅读 · 0 评论 -
C++ Primer:第2章 变量和基本类型
第2章 变量和基本类型2.1 基本内置类型基本内容:算术类型包含字符,整型数,布尔值和浮点数,空类型不对应具体值,仅用于无返回值时函数的返回类型等特殊场合。类型转换:将对象从一种给定的类型转换为另一种类型。字面值常量:整型字面值,浮点型字面值,字符字面值,字符串字面值,转义序列,字面值前缀和后缀,布尔字面值,指针字面值。备注:整型包括布尔类型和字符类型。bit是数据存储的最...原创 2020-01-10 10:03:58 · 338 阅读 · 1 评论 -
C++ Primer:常量引用、引用常量、常量指针、指针常量
常量引用:绑定常量的引用。const int ci = 1;const int &r = ci;r = 2;//错误,r不可修改引用常量:不存在引用常量的说法。int i = 1;int &const r = i;//错误3. 常量指针:指向常量的指针。const int i = 1;const int *p1;int const *p2;//...原创 2020-03-05 16:07:28 · 1459 阅读 · 4 评论 -
C++ Primer:引用、指针和const的用法总结
C++ Primer:引用、指针和const的用法总结1. 背景2 引用3. 指针4. const1. 背景 在看《C++ Primer》第二章的引用、指针、和const时,发现看的有些迷糊,现总结一下引用、指针和const的用法。2 引用引用并非对象,只是别名。引用必须在定义时初始化,且只能绑定一个对象;引用类型必须与绑定对象的类型相匹配(有2个例外,分别与const和类有关)...原创 2020-01-08 08:36:56 · 317 阅读 · 0 评论