C++ Primer(第5版)学习笔记
文章平均质量分 69
C++ Primer(第5版)学习笔记
班公湖里洗过脚
上马击狂胡,下马草军书
展开
-
《C++ Primer》第19章 19.8节习题答案
《C++ Primer》第19章 特殊工具与技术19.8节 固有的不可移植的特性 习题答案练习19.26:说明下列声明语句的含义并判断它们是否合法:extern "C" int compute(int *, int);extern "C" double compute(double *, double);【出题思路】理解链接指示的声明,熟悉函数重载的使用。【解答】第一个声明指出:compute是一个用C语言编写的函数,该函数接受一个int*类型及一个int类型的形参,返回原创 2021-11-17 23:23:08 · 156 阅读 · 0 评论 -
《C++ Primer》第19章 19.6节习题答案
《C++ Primer》第19章 特殊工具与技术19.6节 union:一种节省空间的类习题答案练习19.21:编写你自己的Token类。【出题思路】通过编写Token类,练习使用类对union成员进行管理控制。【解答】class Token {public: // 因为union含有一个string成员,所以Token必须定义拷贝控制成员 Token(): tok(INT), ival{0} { } Token(const Token &t): tok(t.to原创 2021-11-16 23:09:20 · 856 阅读 · 0 评论 -
《C++ Primer》第19章 19.4节习题答案
《C++ Primer》第19章 特殊工具与技术19.4节 类成员指针 习题答案练习19.11:普通的数据指针与指向数据成员的指针有何区别?【出题思路】通过和普通数据指针做对比,理解成员指针。【解答】区别在于:指定指向数据成员的指针的类型时,除了给出成员本身的类型之外,还必须给出所属类的类型。例如:指向int型数据的普通数据指针的类型为int*,而指向C类的int型数据成员的成员指针的类型为int C::*。练习19.12:定义一个成员指针,令其可以指向Screen类的cur原创 2021-11-14 21:03:22 · 916 阅读 · 0 评论 -
《C++ Primer》第19章 19.2节习题答案
《C++ Primer》第19章 特殊工具与技术19.2节 运行时类型识别 习题答案练习19.3:已知存在如下的类继承体系,其中每个类分别定义了一个公有的默认构造函数和一个虚析构函数:class A { /* ... */ };class B: public A { /* ... */ };class C: public B { /* ... */ };class D: public B, public A { /* ... */ };下面的哪个dynamic_cast将失败?原创 2021-11-12 23:35:37 · 1050 阅读 · 0 评论 -
《C++ Primer》第19章 19.1节习题答案
《C++ Primer》第19章 特殊工具与技术导读本章介绍了一些特殊的C++特性,如控制内存分配、运行时类型识别、枚举类型等。本章的练习通过贯穿本书的一些例子帮助读者练习这些语言特性的使用。19.1节习题答案练习19.1:使用malloc编写你自己的operator new(size_t)函数,使用free编写operator delete(void *)函数。【出题思路】用户自定义operator new函数和operator delete函数的练习,控制内存分配的过程,不局原创 2021-11-11 23:36:29 · 711 阅读 · 0 评论 -
《C++ Primer》第18章 18.3节习题答案
《C++ Primer》第18章 用于大型程序的工具18.3节 多重继承与虚继承 习题答案练习18.21:解释下列声明的含义,在它们当中存在错误吗?如果有,请指出来并说明错误的原因。(a)class CADVehicle: public CAD, Vehicle{ ... };(b)class DblList:public List, public List { ... };(c)class iostream: public istream, public ostream { ... };原创 2021-11-10 22:13:24 · 559 阅读 · 0 评论 -
《C++ Primer》第18章 18.2节习题答案
《C++ Primer》第18章 用于大型程序的工具18.2节 命名空间 习题答案练习18.11:为什么what函数不应该抛出异常?【出题思路】深入理解what函数的作用和在异常处理中所处的重要位置。【解答】what函数是在catch异常后用于提取异常基本信息的虚函数,what函数是确保不会抛出任何异常的。如果what函数抛出了异常,则会在新产生的异常中由于what函数继续产生异常,将会产生抛出异常的死循环。所以what函数必须确保不抛出异常。练习18.12:将你为之前各章练原创 2021-11-09 23:10:43 · 449 阅读 · 0 评论 -
《C++ Primer》第18章 18.1节习题答案
《C++ Primer》第18章 用于大型程序的工具本章介绍了一些用于大型程序开发的语言特性,包括:●异常处理。●命名空间。●多重继承与虚继承。本章的练习着重帮助读者理解异常的基本概念,练习异常捕获和异常处理的设计;理解命名空间和名字解析;理解多重继承和虚继承的概念,并进行相应的设计练习。18.1节习题答案练习18.1:在下列throw语句中异常对象的类型是什么?(a) range_error r("error"); (b) exception *p = &r;原创 2021-11-08 23:19:09 · 507 阅读 · 0 评论 -
《C++ Primer》第17章 17.5节习题答案
《C++ Primer》第17章 标准库特殊设施17.5节 IO库再探 习题答案原创 2021-11-07 18:15:51 · 186 阅读 · 0 评论 -
《C++ Primer》第17章 17.4节习题答案
《C++ Primer》第17章 标准库特殊设施17.4节 随机数 习题答案练习17.28:编写函数,每次调用生成并返回一个均匀分布的随机unsigned int。【出题思路】本题练习生成随机数。【解答】在函数中定义随机数引擎e作为随机数源,定义均匀分布u生成指定范围内的均匀分布的随机数。然后调用u(e)即可获得一个随机数。注意,将u和e声明为静态变量以保持状态,使得每次调用函数得到序列中的下一个数。...原创 2021-11-06 23:38:05 · 268 阅读 · 0 评论 -
《C++ Primer》第17章 17.3节习题答案
《C++ Primer》第17章 标准库特殊设施17.3节 正则表达式 习题答案原创 2021-11-05 23:49:41 · 248 阅读 · 0 评论 -
《C++ Primer》第17章 17.2节习题答案
《C++ Primer》第17章 标准库特殊设施17.2节 BITSET类型 习题答案练习17.9:解释下列每个bitset对象所包含的位模式:(a)bitset<64> bitvec(32);(b)bitset<32> bv(1010101);(c)string bstr; cin >> bstr; bitset<8>bv(bstr);【出题思路】熟悉bitset的定义。【解答】(a)bitvec为32位,第5位为1,剩余原创 2021-11-04 23:26:21 · 328 阅读 · 0 评论 -
《C++ Primer》第17章 17.1节习题答案
《C++ Primer》第17章 标准库特殊设施导读本章介绍了tuple、bitset、正则表达式、随机数和特殊的IO操作。本章的练习帮助读者熟悉这些标准库设施的使用。17.1节 tuple类型 习题答案练习17.1:定义一个保存三个int值的tuple,并将其成员分别初始化为10、20和30。【出题思路】本题练习定义tuple。【解答】注意只能直接初始化。tuple<int, int, int> ti{10, 20, 30}练习17.2:定义一个t原创 2021-11-03 23:06:35 · 268 阅读 · 0 评论 -
《C++ Primer》第16章 16.5节习题答案
《C++ Primer》第16章 模板与泛型编程16.5节模板特例化 习题答案练习16.62:定义你自己版本的hash<Sales_data>,并定义一个Sales_data对象的unordered_multiset。将多条交易记录保存到容器中,并打印其内容。【出题思路】本题练习类模板特例化。【解答】#ifndef PROGRAM16_62_SALES_DATA_H#define PROGRAM16_62_SALES_DATA_H#include <str原创 2021-11-02 22:25:26 · 256 阅读 · 0 评论 -
《C++ Primer》第16章 16.4节习题答案
《C++ Primer》第16章 模板与泛型编程16.4节可变参数模板 习题答案练习16.51:调用本节中的每个foo,确定sizeof…(Args)和sizeof…(rest)分别返回什么。【出题思路】理解可变参数模板。【解答】对4个调用,sizeof…(Args)和sizeof…(rest)分别返回:3 32 21 10 0练习16.52:编写一个程序验证你对上一题的答案。【出题思路】理解可变参数模板。【解答】#include <...原创 2021-11-01 22:08:13 · 249 阅读 · 0 评论 -
《C++ Primer》第16章 16.3节习题答案
《C++ Primer》第16章 模板与泛型编程16.3节 重载与模板 习题答案练习16.48:编写你自己版本的debug_rep函数。【出题思路】理解模板重载。【解答】参考书中本节内容编写,与配套网站中的代码进行对照即可。尝试定义宏OVERCHAR(#define OVERCHAR)和SPECIALIZED(#define SPECIALIZED)来改变源码,重新编译运行程序,观察输出结果的差异(同时定义宏DEBUG,可以观察函数(模板)被调用的次序,更好地帮助你理解结果差异的原创 2021-10-31 19:07:33 · 276 阅读 · 0 评论 -
《C++ Primer》第16章 16.2节习题答案
《C++ Primer》第16章 模板与泛型编程16.2节习题答案练习16.32:在模板实参推断过程中发生了什么?【出题思路】理解模板实参推断。【解答】对一个函数模板,当我们调用它时,编译器会利用调用中的函数实参来推断其模板参数,这些模板实参实例化出的版本与我们的函数调用应该是最匹配的版本,这个过程就称为模板实参推断。练习16.33:指出在模板实参推断过程中允许对函数实参进行的两种类型转换。【出题思路】理解模板实参推断过程中的类型转换。【解答】在模板实参推断过原创 2021-10-30 20:35:36 · 464 阅读 · 2 评论 -
《C++ Primer》第16章 16.1节习题答案2
《C++ Primer》第16章 模板与泛型编程16.1节定义模板 习题答案练习16.17:声明为typename的类型参数和声明为class的类型参数有什么不同(如果有的话)?什么时候必须使用typename?【出题思路】理解typename和class。【解答】当用来声明模板类型参数时,typename和class是完全等价的,都表明模板参数是一个类型。在C++最初引入模板时,是使用class的。但为了避免与类(或类模板)定义中的class相混淆,引入了typename关键字。.原创 2021-10-29 23:25:06 · 419 阅读 · 1 评论 -
《C++ Primer》第16章 16.1节习题答案
《C++ Primer》第16章 模板与泛型编程导读本章介绍了模板的相关知识,包括:●如何定义模板。●模板参数推断过程。●重载模板。●可变参数模板及模板特例化。本章的练习着重帮助读者掌握如何利用模板这种语言特性来实现泛型编程,包括理解模板的基本概念、练习定义函数模板和类模板、理解模板参数推断过程、理解重载模板对函数匹配的影响以及理解练习可变参数模板和特例化的设计。16.1节定义模板 习题答案练习16.1:给出实例化的定义。【出题思路】理解实例化的基本概念。【解答】原创 2021-10-28 23:39:43 · 425 阅读 · 0 评论 -
《C++ Primer》第15章 15.9节习题答案
《C++ Primer》第15章 面向对象程序设计15.9节 文本查询程序再探 习题答案练习15.30:编写你自己的Basket类,用它计算上一个练习中交易记录的总价格。【出题思路】本题是类构造编程练习。【解答】#include <iostream>#include <string>#include <ostream>#include <vector>#include <memory>#include <原创 2021-10-27 22:37:38 · 798 阅读 · 1 评论 -
《C++ Primer》第15章 15.8节习题答案
《C++ Primer》第15章 面向对象程序设计15.8节 容器与继承 习题答案练习15.27:重新定义你的Bulk_quote类,令其继承构造函数。【出题思路】本题练习继承构造函数的定义。【解答】#include <iostream>#include <string>#include <ostream>using namespace std;class Quote{public: Quote() = default;原创 2021-10-26 22:01:31 · 3371 阅读 · 0 评论 -
《C++ Primer》第15章 15.7节习题答案
《C++ Primer》第15章 面向对象程序设计15.7节 构造函数与拷贝控制 习题答案练习15.24:哪种类需要虚析构函数?虚析构函数必须执行什么样的操作?【出题思路】熟悉虚析构函数的知识。【解答】作为基类使用的类应该具有虚析构函数,以保证在删除指向动态分配对象的基类指针时,根据指针实际指向的对象所属的类型运行适当的析构函数。虚析构函数可以为空,即不执行任何操作。一般而言,析构函数的主要作用是清除本类中定义的数据成员。如果该类没有定义指针类成员,则使用合成版本即可;如果该类定义了原创 2021-10-25 22:30:09 · 222 阅读 · 0 评论 -
《C++ Primer》第15章 15.6节习题答案
《C++ Primer》第15章 面向对象程序设计15.6节 继承中的类作用域 习题答案练习15.23:假设第550页的D1类需要覆盖它继承而来的fcn函数,你应该如何对其进行修改?如果你修改之后fcn匹配了Base中的定义,则该节的那些调用语句将如何解析?【出题思路】虚函数与其作用域的练习。【解答】1.将D1类的fcn函数更改为int fcn()。2.p2->fcn(42),这一条调用语句将会出错。...原创 2021-10-24 09:11:03 · 183 阅读 · 0 评论 -
《C++ Primer》第15章 15.5节习题答案
《C++ Primer》第15章 面向对象程序设计15.5节 访问控制与继承 习题答案练习15.18:假设给定了第543页和第544页的类,同时已知每个对象的类型如注释所示,判断下面的哪些赋值语句是合法的。解释那些不合法的语句为什么不被允许:...原创 2021-10-23 17:11:51 · 442 阅读 · 0 评论 -
《C++ Primer》第15章 15.4节习题答案
《C++ Primer》第15章 面向对象程序设计15.4节 抽象基类 习题答案练习15.15:定义你自己的Disc_quote和Bulk_quote。【出题思路】本题练习实现不同折扣策略。【解答】#include <iostream>using std::cout;using std::endl;using std::string;class Quote{public: Quote() = default; Quote(const std:原创 2021-10-23 14:25:31 · 614 阅读 · 0 评论 -
《C++ Primer》第15章 15.3节习题答案
《C++ Primer》第15章 面向对象程序设计15.3节 虚函数 习题答案练习15.11:为你的Quote类体系添加一个名为debug的虚函数,令其分别显示每个类的数据成员。【出题思路】虚函数的构造练习。【解答】#include <iostream>using std::cout;using std::endl;class Quote{public: Quote() = default; Quote(const std::string.原创 2021-10-23 12:50:18 · 343 阅读 · 0 评论 -
《C++ Primer》第15章 15.2节习题答案
本章介绍了面向对象程序设计的两个重要概念:继承和动态绑定,包括:□●继承、基类、派生类的基本概念。□●虚函数和虚基类。□●继承中的访问控制、类作用域、构造函数和拷贝控制等问题。本章练习的最重要目的是让读者理解这些基本概念。掌握根据实际问题特点设计合理的类层次的能力。特别是对比较大的例子——文本查询程序进行修改,练习类层次的设计,来更好地掌握这些基本能力。原创 2021-10-22 23:59:10 · 254 阅读 · 0 评论 -
《C++ Primer》第14章 14.9节习题答案
《C++ Primer》第14章 操作重载与类型转换14.9节 重载、类型转换与运算符 习题答案练习14.45:编写类型转换运算符将一个Sales_data对象分别转换成string和double,你认为这些运算符的返回值应该是什么?【出题思路】理解类型转换运算符。【解答】如果要转换成string,那么返回值应该是bookNo。如果要转换成double,那么返回值应该是revenue。...原创 2021-10-21 23:10:07 · 342 阅读 · 0 评论 -
《C++ Primer》第14章 14.8节习题答案
《C++ Primer》第14章 操作重载与类型转换14.8节 函数调用运算符 习题答案练习14.33:一个重载的函数调用运算符应该接受几个运算对象?【出题思路】理解调用运算符。【解答】0个或多个。练习14.34:定义一个函数对象类,令其执行if-then-else的操作:该类的调用运算符接受三个形参,它首先检查第一个形参,如果成功返回第二个形参的值,如果不成功返回第三个形参的值。【出题思路】本题练习定义调用运算符。【解答】#include <io原创 2021-10-20 23:05:44 · 316 阅读 · 1 评论 -
《C++ Primer》第14章 14.7节习题答案
《C++ Primer》第14章 操作重载与类型转换14.7节 成员访问运算符 习题答案练习14.30:为你的StrBlobPtr类和在12.1.6节练习12.22(第423页)中定义的ConstStrBlobPtr类分别添加解引用运算符和箭头运算符。注意:因为ConstStrBlobPtr的数据成员指向const vector,所以ConstStrBlobPtr中的运算符必须返回常量引用。【出题思路】本题练习实现解引用和箭头运算符。【解答】class StrBlobPtr{p原创 2021-10-19 22:35:26 · 186 阅读 · 1 评论 -
《C++ Primer》第14章 14.6节习题答案
《C++ Primer》第14章 操作重载与类型转换14.6节 递增和递减运算符 习题答案练习14.27:为你的StrBlobPtr类添加递增和递减运算符。【出题思路】本题练习实现递增和递减运算符。【解答】class StrBlobPtr{public: //前缀 StrBlobPtr& operator++(); StrBlobPtr& operator--(); //后缀 StrBlobPtr operator++(i原创 2021-10-18 22:09:43 · 179 阅读 · 0 评论 -
《C++ Primer》第14章 14.5节习题答案
《C++ Primer》第14章 操作重载与类型转换14.5节 下标运算符 习题答案练习14.26:为你的StrBlob类,StrBlobPtr类,StrVec类和String类定义下标运算符。原创 2021-10-17 19:25:07 · 161 阅读 · 0 评论 -
《C++ Primer》第14章 14.4节习题答案
《C++ Primer》第14章 操作重载与类型转换14.4节 赋值运算符 习题答案练习14.20:为你的Sales_data类定义加法和复合赋值运算符。原创 2021-10-17 18:32:45 · 177 阅读 · 0 评论 -
《C++ Primer》第14章 14.3节习题答案
《C++ Primer》第14章 操作重载与类型转换14.3节 算术和关系运算符 习题答案练习14.13:你认为Sales_data类还应该支持哪些其他算术运算符(参见表4.1,第124页)?如果有的话,请给出它们的定义。...原创 2021-10-17 17:42:45 · 413 阅读 · 0 评论 -
《C++ Primer》第14章 14.2节习题答案
《C++ Primer》第14章 操作重载与类型转换14.2节 算术和关系运算符 习题答案练习14.5:在7.5.1节的练习7.40(第261页)中,编写了下列类中某一个的框加,请问在这个类中应该定义重载的运算符吗?如果是,请写出来。(a) Book (b) Date (c) Employee(b) Vehicle (e) Object (f) Tree 【出题思路】学会判断是否需要为类定义重载运算符。【解答】以(b)Date为例,...原创 2021-10-17 17:00:05 · 214 阅读 · 0 评论 -
《C++ Primer》第14章 14.1节习题答案
《C++ Primer》第14章 操作重载与类型转换本章介绍了运算符重载的基本概念,介绍了各种运算符的重载方式,并介绍了类型转换与运算符重载的关系。本章的练习着重让读者掌握各种运算符的重载,包括输入/输出运算符、各种算术运算符、下标运算符以及函数调用运算符等。特别是,结合自定义的Sales_data、StrBlob等较为复杂的类进行运算符重载的练习,让读者体会运算符重载是如何帮助改进代码质量的。此外,还通过一些练习帮助读者弄清类型转换与运算符重载的关系。特别是,当有多个重载版本时,在进行函数匹配时涉及类原创 2021-10-17 13:07:01 · 321 阅读 · 0 评论 -
《C++ Primer》第13章 13.6节习题答案
《C++ Primer》第13章 拷贝控制13.6节 对象移动 习题答案练习13.45:解释右值引用和左值引用的区别。【出题思路】理解左值引用和右值引用。【解答】所谓右值引用就是必须绑定到右值的引用,通过&&获得。右值引用只能绑定到一个将要销毁的对象上,因此可以自由地移动其资源。左值引用,也就是“常规引用”,不能绑定到要转换的表达式、字面常量或返回右值的表达式。而右值引用恰好相反,可以绑定到这类表达式,但不能绑定到一个左值上。返回左值的表达式包括返回左值引用的函数及赋原创 2021-10-17 09:06:21 · 341 阅读 · 0 评论 -
《C++ Primer》第13章 13.5节习题答案
《C++ Primer》第13章 拷贝控制13.5节 动态内存管理类 习题答案原创 2021-10-16 22:43:02 · 328 阅读 · 0 评论 -
《C++ Primer》第13章 13.4节习题答案
《C++ Primer》第13章 拷贝控制13.4节 拷贝控制示例 习题答案练习13.33:为什么Message的成员save和remove的参数是一个Folder&?为什么我们不将参数定义为Folder或是const Folder&?【出题思路】理解两个成员函数的语义,以及这种语义导致对参数类型的要求。【解答】首先,我们需要将给定Folder的指针添加到当前Message的folders集合中。这样,参数类型就不能是Folder,必须是引用类型。否则,调用save时原创 2021-10-16 17:43:54 · 462 阅读 · 0 评论 -
《C++ Primer》第13章 13.3节习题答案
《C++ Primer》第13章 拷贝控制13.3节 交换操作 习题答案练习13.29:解释swap(HasPtr&, HasPtr&)中对swap的调用不会导致递归循环。【出题思路】理解swap调用的确定。【解答】在此swap函数中又调用了swap来交换HasPtr成员ps和i。但这两个成员的类型分别是指针和整型,都是内置类型,因此函数中的swap调用被解析为std::swap,而不是HasPtr的特定版本swap(也就是自身),所以不会导致递归循环。...原创 2021-10-16 15:08:37 · 413 阅读 · 0 评论