![](https://img-blog.csdnimg.cn/20190927151043371.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
cppPrimer错题本
文章平均质量分 82
记录cppPrimer做习题过程中一些重要题目
FuzhouJiang
专注后端、C/C++开发的菜鸟,相信日拱一卒、功不唐捐。欢迎各位对博文批评指正,互相学习
展开
-
cppPrimer第十九章
19.3 已知存在如下的类继承体系,其中每个类分别定义了一个公有的默认构造函数和一个虚析构函数:class A {public: virtual ~A() {}};class B : public A {public: virtual ~B() {}};class C : public B {public: virtual ~C() {}};class D : public B, public A {public: virtual ~D() {}};void p19_3(原创 2022-04-28 15:01:34 · 276 阅读 · 0 评论 -
cppPrimer第十八章习题
18.1 在下列throw语句中异常对象的类型是什么?(a)range_error r("error");throw r;(b) exception *p = &r;throw *p;如果将(b)中的throw语句写成了throw p将发生什么情况?(a)的throw异常对象类型为 range_error(b)throw语句异常对象类型为exception如果写成throw p,则抛出的是一个指针,如果指针指向的是一个局部变量,那么是一个错误行为,因为到catch语句时指针指向的对原创 2022-04-24 13:18:07 · 403 阅读 · 0 评论 -
cppPrimer第17章习题
17.3 重写12.3节(第430页)中的TextQuery程序,使用tuple代替QueryResult类,你认为哪种设计好,为什么?TextQuery.h#pragma once#ifndef TEXTQUERY_H#define TEXTQUERY_H#include<iostream>#include<vector>#include<string>#include<map>#include<set>#include<原创 2022-04-14 19:38:04 · 137 阅读 · 0 评论 -
cppPrimer第十六章习题
16.1 给出实例化的定义当我们调用一个函数模板的时候,编译器用函数实参来为我们推断模板实参。然后编译器利用推断出的模板参数来为我们创建出模板的一个新的“实例”16.2 编写并测试你自己版本的compare函数template<typename T>int compare(const T& v1, const T& v2){ if (less<T>()(v1, v2)) return -1; if (less<T>()(v2, v1)) re原创 2022-04-07 13:20:07 · 1195 阅读 · 0 评论 -
cppPrimer第十五章习题
15.1 什么是虚成员即虚函数,对于某些成员函数,基类希望它的派生类个自定义适合自身的版本,此时基类就将这些函数声明成虚函数,并且通过基类指针和引用调用虚函数时会根据绑定的实际对象来选择合适版本的函数,即动态绑定(运行时绑定)。15.2 protected访问说明符与private有何区别protected访问说明符所控制的成员只能在类内使用或者是派生类内被访问,友元也是可以访问的,private控制的成员只能在类内或者被友元访问15.4 下面哪条声明语句是不正确的?请解释原因class Bas原创 2022-04-03 16:11:05 · 215 阅读 · 0 评论 -
cppPrimer第十四章习题
14.1 什么情况下重载的运算符与内置运算符有所区别?在什么情况下重载的运算符又与内置运算符一样重载的运算符和内置运算符在对象求值顺序和短路求值属性上不同。在优先级、结合律、运算对象的数量上相同。14.2 为Sales_data编写重载的输入、输出、加法和复合赋值运算符Sales_data.h#pragma once#ifndef SALES_DATA_H#define SALES_DATA_H#include<iostream>#include<string&原创 2022-03-28 13:52:42 · 899 阅读 · 0 评论 -
cppPrimer第十三习题
13.1 拷贝构造函数是什么?什么时候使用它如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。当使用拷贝初始化时会用到拷贝构造函数在类初始化时候会使用到拷贝构造函数,有以下几种情况:将一个对象作为实参传递给一个非引用类型的形参从一个返回类型为非引用类型的函数返回一个对象。用花括号列表初始化一个数组中的元素或一个聚合类中的成员13.2 解释为什么下面声明是非法的:Sales_data::Sales_data(Sales_data rhs);原创 2022-03-23 15:01:47 · 254 阅读 · 0 评论 -
cppPrimer第十二章习题
12.3 StrBlob需要const版本的push_back和pop_back吗?如果需要添加进去。否则解释为什么不需要?不需要,因为push_back和pop_back都是修改data指向的vector的元素,用了const就无法修改了12.4 (P407)在我们的check函数中,没有检查i是否大于0.为什么可以忽略这个检查?size_type(底层是size_t)本身就是unsigned int类型,必然会 >= 012.5 我们未编写接受一个initializer_list expl原创 2022-03-18 14:35:44 · 818 阅读 · 0 评论 -
cppPrimer第十一章习题
11.1 描述map和vector的不同map是关联式容器,vector是顺序容器map中的元素是通过关键字来保存和访问的vector中的元素是通过它们在容器中的位置来顺序保存和访问的11.2 分别给出最适合使用list、vector、deque、map以及set的例子对容器有大量删除和添加操作以及希望通过迭代器前后访问元素的时候可以用list仅希望在尾部插入删除删除元素以及希望通过下标快速随机访问元素的时候适合用vector希望在尾部和头部删除和添加元素以及希望通过下标快速随机访问元素的时候原创 2022-03-15 14:40:15 · 866 阅读 · 0 评论 -
cppPrimer第十章习题
10.5 调用equal的例子中,若两个序列保存的都是C风格字符串而不是string会发生什么C风格字符串是用指向字符的指针表示的,因此会比较这两个指针的值(地址),而不会比较这两个字符串的内容10.7 下面程序是否有错误?如果有,请改正void p10_7a(){ vector<int> vec; list<int> lst; int i; while (cin >> i) lst.push_back(i); //意图:想要将lst中元素都拷贝到vec原创 2022-03-14 15:19:31 · 133 阅读 · 0 评论 -
cppPrimer第九章
9.1 对于下面的程序任务,vector、deque和list哪种容器最为适合?解释你选择的理由。(a)读取固定数量的单词,将它们按字典序插入到容器中(b) 读取未知数量的单词,总是将新单词插入到末尾。删除在头部进行© 从一个文件读取未知数量的整数。将这些数排序,然后将它们打印到标准输出(a)适合用list,因为按字典序插入到容器中,很多情况是插入到原序列的中间位置,list在任何位置插入/删除的速度较快。(b)适合于用deque(双端队列),因为一个标准的单端队列就是头删尾插,故执行该操作速原创 2022-03-10 13:42:31 · 301 阅读 · 0 评论 -
cppPrimer第八章习题
8.11 本节的程序在外层while循环中定义了 istringstream 对象,如果record对象定义在循环之外,你需要对程序进行怎样的修改?重写程序,将record的定义移到while循环外,验证你设想的修改方法是否正确struct PersonInfo { string name; vector<string> phones; void printData();};void PersonInfo::printData(){ cout << name &l原创 2022-03-07 11:33:38 · 141 阅读 · 0 评论 -
cppPrimer第七章习题
7.3 修改7.1.1节交易程序,令其使用这些成员struct Sales_data { std::string bookNo; unsigned units_sold = 0; double revenue = 0.0; string isbn() const { return bookNo; } Sales_data& combine(const Sales_data& rhs) { units_sold += rhs.units_sold; revenue +=原创 2022-03-06 10:08:41 · 428 阅读 · 0 评论 -
cppPrimer第六章习题
6.1 实参和形参的区别是什么?实参是形参的初始值,实参是调用函数时提供的,第一个实参初始化第一个形参,第二个实参初始化第二个形参,以此类推。6.2 指出下列函数哪个有错误,为什么?应该如何修改这些错误?(a) //实际返回值和指定返回值不一致int f(){ string s; return s;}(b)//没有给出返回值f2(int i){/*....*/}(c)//形参不可以重名,且函数体漏了{int calc(int v1,int v1)/**/}(d)/原创 2022-03-02 16:10:40 · 379 阅读 · 0 评论 -
cppPrimer第五章习题
5.1 什么是空语句?何时会用到空语句?空语句中只含有一个单独的分号,如果在程序的某个地方,语法上需要一条语句(如while和for),但逻辑上不需要,此时应该使用空语句。5.2 什么是块,什么时候会用到块复合语句是指用花括号括起来的(可能为空的)语句和声明的序列,复合语句也被称为块,一个块就是一个作用域。语法上需要一条语句,但是逻辑上需要多条语句,则应该使用复合语句(块)。5.3 使用逗号运算符重写1.4.1节的while循环,使它不再需要块,观察改写后的代码的可读性提高了还是降低了whil原创 2022-02-24 16:17:22 · 537 阅读 · 2 评论 -
cppPrimer第四章习题
4.3 C++语言没有明确规定大多数二元运算符的求值顺序,给编译器优化留下余地。这种策略实际上是在代码生成效率和程序潜在缺陷之间进行权衡,你认为这可以接受吗?请说出你的理由。对于没有指定执行顺序的运算符来说,如果表达式指向并修改了同一个对象,将会引发错误并产生为定义行为如:cout<<i<<" "<<++i<<endl; //不能确定先执行++i还是i而如果运算对象彼此无关,它们既不会改变同一对象的状态也不执行IO任务,则函数掉用顺序不受限制。所以在一定原创 2022-02-21 15:46:12 · 313 阅读 · 0 评论 -
cppPrimer第三章习题
3.3 请说明string类的输入运算符和getline函数分别是如何处理空白字符的string类输入运算符会忽略开头的空白(空格符、换行符、制表符等),从第一个真正的字符开始读起,直到遇见下一处空白为止。getline(istream& is, string str)函数会保留在一行中输入的空白符。getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止。3.12 判断下列vector对象定义有不正确的吗?如果有,请指出来。对于正确的,原创 2022-02-21 15:44:49 · 412 阅读 · 0 评论 -
cppPrimer第二章习题
2.1int、long、long long和short区别主要是在所占比特数上有所区别,int 和long通常占32bit,long long占 64bit,short占16bit。无符号类型只能表示0和正数,有符号类型可以表示负数、0、正数;float和double主要差别在精度和所占比特数上。float一般32bit,有7个有效位;double一般64bit,有16个有效位2.2都应该最好选择double类型,因为利率、本金和付款都是可能有小数出现。2.5(a)‘a’ char;L原创 2022-02-11 15:38:08 · 445 阅读 · 0 评论 -
cppPrimer第一章习题
1.6 程序不合法,v1;后代表该行代码已经结束,下面两行>>左边需要有一个ostream对象,应该修改为:cout << "The sum of " << v1;cout << " and " << v2;cout << " is " << v1 + v2 << endl;1.7 编译器会提示嵌套后面的内容为未定义标识符1.8std::cout << "/*"; //输出:/*原创 2022-01-23 23:06:37 · 299 阅读 · 0 评论