《C++ Primer》7.5.1节练习

练习7.36:
在类X中,两个数据成员出现的顺序是rem在前,base在后,所以当执行X对象的初始化操作时先初始化rem。如上述代码所示,初始化rem要用到base的值,而此时base尚未被初始化,因此会出现错误。该过程与构造函数初始值列表中谁出现在前面谁出现在后面没有任何关系。
修改的方法很简单,只需要把变量rem和base的次序调换即可,形式是:

struct X
{X(int i,int j):base(i),rem(base%j){}int base,rem;
};

练习7.37:
Sales_data first_item(cin);使用了接受std::istream&参数的构造函数,该对象的成员值依赖于用户的输入。
Sales_data next;使用了Sales_data的默认构造函数,其中string类型的成员bookNo默认初始化为空字符串,其他几个成员使用类内初始值初始化为0。
Sales_data last(“9-999-99999-9”);使用了接受const string&参数的构造函数,其中bookNo使用实参初始化为"9-999-99999-9",其他几个成员使用类内初始值初始化为0。

练习7.37:
满足题意的构造函数如下所示:

Sales_data(std::istream&is = std::cin){is>>*this;}

此时该函数具有了默认构造函数的作用,因此我们原来声明的默认构造函数Sales_data()= default;应该去掉,否则会引起调用的二义性。

练习7.39:
如果我们为构造函数的全部形参都提供了默认实参(包括为只接受一个形参的构造函数提供默认实参),则该构造函数同时具备了默认构造函数的作用。此时即使我们不提供任何实参地创建类的对象,也可以找到可用的构造函数。
然而,如果按照本题的叙述,我们为两个构造函数同样都赋予了默认实参,则这两个构造函数都具有了默认构造函数的作用。一旦我们不提供任何实参地创建类的对象,则编译器无法判断这两个(重载的)构造函数哪个更好,从而出现了二义性错误。

练习7.40:
首先选择(a)Book,一本书通常包含书名、ISBN编号、定价、作者、出版社等信息,因此令其数据成员为:Name、ISBN、Price、Author、Publisher,其中Price是double类型,其他都是string类型。Book的构造函数有三个:一个默认构造函数、一个包含完整书籍信息的构造函数和一个接受用户输入的构造函数。其定义如下:

class Book
{private:string Name,ISBN,Author,Publisher;double Price = 0;public:Book() = default;Book(const string &n,const string &I,double pr,const string &a,const string &p){Name = n;ISBN = I;Price = pr;Author = a;Publisher =  p;}Book(std::istream&is){is>>*this;}
};

也可以选择(f)Tree,一棵树通常包含树的名称、存活年份、树高等信息,因此令其数据成员为:Name、Age、Height,其中Name是string类型,Age是unsigned类型,Height是double类型。假如我们不希望由用户输入Tree的信息,则可以去掉接受std::istream&形参的构造函数,只保留默认构造函数和接受全部信息的构造函数。其定义如下:

class Tree
{private:string Name;unsigned Age = 0;double Height = 0;public:Tree() = default;Tree(const string &n,unsigned a,double h):Name(n),Age(a),Height(h);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装 java decompiler_Eclipse离线安装Java Decompiler插件(反编译)

Java Decompiler是Java语言的反编译工具,具体介绍见博客Java Decompiler(Java反编译工具)1、下载插件Eclipe的Java Decompiler插件名为JD-Eclipse,2、安装插件Ecipse安装JD-Eclipse(即Java Decompiler)插件步骤如下:打开Help --> Install …

给 ABP vNext 应用安装私信模块

在上一节五分钟完成 ABP vNext 通讯录 App 开发 中,我们用完成了通讯录 App 的基础开发。这本章节,我们会给通讯录 App 安装私信模块,使不同用户能够通过相互发送消息,并接收新私信的通知。在章节的最后,笔者将演示模块…

《C++ Primer》7.5.2节练习

练习7.41: #include <iostream> #include <string> using namespace std;class Sales_data {friend std::istream &read(std::istream &is, Sales_data &item);friend std::ostream &print(std::ostream &os, const Sales_data &item);pu…

零基础玩视频号?创作运营变现,你要的干货都在这了!

点击蓝字“大白技术控”关注我哟加个“星标★”&#xff0c;每日良时&#xff0c;好文必达&#xff01;不少小伙伴应该已经听说过视频号这个新功能了&#xff0c;视频号是微信内测的短视频功能&#xff0c;本人已经在视频号里刷了2个月了。3月中旬正式开通了视频号 「大白技术控…

《C++ Primer》14.1节练习

练习14.1: 不同点&#xff1a; 重载操作符必须具有至少一个class或枚举类型的操作数。 重载操作符不保证操作数的求值顺序&#xff0c;例如对&&和||的重载版本不再具有“短路求值”的特性&#xff0c;两个操作数都要进行求值&#xff0c;而且不规定操作数的求值顺序。 …

mysql 磁盘i o 优化_经典案例:磁盘I/O巨高排查全过程

作者&#xff1a;叶金荣&#xff0c;知数堂联合创始人&#xff0c;3306pai社区联合创始人前言是什么原因导致线上数据库服务器磁盘I/O的util和iowait持续飚高&#xff1f;1. 问题描述朋友小明的线上数据库突发严重告警&#xff0c;业务方反馈写入数据一直堵住&#xff0c;很多锁…

Asp.Net Core 中IdentityServer4 实战之 Claim详解

一、前言由于疫情原因&#xff0c;让我开始了以博客的方式来学习和分享技术&#xff08;持续分享的过程也是自己学习成长的过程&#xff09;&#xff0c;同时也让更多的初学者学习到相关知识&#xff0c;如果我的文章中有分析不到位的地方&#xff0c;还请大家多多指教&#xf…

《C++ Primer》14.2.1节练习

练习14.6: class Sales_data {friend ostream&operator<<(sotream&os,const Salse_data &item); };ostream&operator<<(ostream &os,const Sales_data &item) {const char *sep ;os<<item.isbn()<<sep<<item.units_s…

程序员还有35岁的坎吗?

昨天晚上和多年未见的前同事聊天&#xff0c;提到了程序员的年龄歧视问题&#xff1a;自己年龄也 30 出头了&#xff0c;在思考 IT 届流传的 35 岁是一个坎的问题&#xff1b;开始注重提升管理能力&#xff0c;担心35岁之后&#xff0c;一线写代码的岗位不能胜任&#xff1b;公…

《C++ Primer》14.2.2节练习

练习14.9: 输入运算符从给定输入流读取对应类型的对象&#xff0c;存入Sales_data的数据成员中。与输出不同&#xff0c;输入通常要进行一些正确性的判定&#xff0c;并进行相应处理。 class Sales_data {friend istream&operator>>(istream&is,Sales_data &am…

java 左移 返回值_java左移右移运算符详解

在阅读源码的过程中&#xff0c;经常会看到这些符号<< &#xff0c;>>&#xff0c;>>>&#xff0c;这些符号在Java中叫移位运算符&#xff0c;在写代码的过程中&#xff0c;虽然我们基本上不会去写这些符号&#xff0c;但需要明白这些符号的运算原理&…

人与人的差距在于认知

作者介绍findyi&#xff0c;腾讯、360码农&#xff0c;前哒哒少儿英语技术VP&#xff0c;现任土豆教育CTO。工作和生活中不光要埋头干活&#xff0c;还要抬头看天。思考总结方法论是提升认知的必备途径&#xff0c;是将碎片化知识总结为动态的智慧的过程。认知有多重要&#xf…

《C++ Primer》14.3节练习

练习14.13: 对于Sales_data类&#xff0c;其实我们并不需要再为它添加其他算术运算符。但是这里我们可以考虑为它实现一个减法运算符。 class Sales_data {friend Sales_data operator-(const Sales_data &lhs,const Sales_data &rhs);public:Sales_data&operator…

C# lock 语法糖实现原理--《.NET Core 底层入门》之自旋锁,互斥锁,混合锁,读写锁...

在多线程环境中&#xff0c;多个线程可能会同时访问同一个资源&#xff0c;为了避免访问发生冲突&#xff0c;可以根据访问的复杂程度采取不同的措施原子操作适用于简单的单个操作&#xff0c;无锁算法适用于相对简单的一连串操作&#xff0c;而线程锁适用于复杂的一连串操作原…

《C++ Primer》14.3.1节练习

练习14.16: //为strBlob定义和! class strBlob {friend bool operator(const strBlob &lhs,const strBlob &rhs);friend bool operator!(const strBlob &lhs,const strBlob &rhs); };bool operator(const strBlob &lhs,const strBlob &rhs) {return l…

java中employee_java Employee(雇员)

public class Employee {//类Employee有两个属性,name,sexString name;char sex;Employee(String n,char s){//用new使用时构造该类&#xff0c;把n,s分别赋值namen;sexs;}public String getName(){//获取namereturn name;}public char getSex(){//获取sexreturn sexl;//你这里…

.NET5来了你别慌

近日微软.Net大咖Scott在博客中对外宣传.NET5首个预览版&#xff0c;并且我们可以通过微软的官网下载SDK5和运行库。很多朋友感觉.NetCore3.1还没搞明白&#xff0c;.NET5就来了感觉一下子慌了神。在这里我提醒朋友们&#xff0c;瞬息万变的世界中&#xff0c;总有相对不变的真…

《C++ Primer》14.3.2节练习(部分)

练习14.18: String类的关系运算符就是比较两个字符串字典序的先后。 class String {friend bool operator<(const String &s1,const String &s2);friend bool operator<(const String &s1,const String &s2);friend bool operator>(const String &am…

java8 stream 最大值_JDK8-Stream流常用方法

Stream流的使用流操作是Java8提供一个重要新特性&#xff0c;它允许开发人员以声明性方式处理集合&#xff0c;其核心类库主要改进了对集合类的 API和新增Stream操作。Stream类中每一个方法都对应集合上的一种操作。将真正的函数式编程引入到Java中&#xff0c;能 让代码更加简…

周三晚6点半!盛派首席架构师“苏老师”在线解密内部系统框架!

工作中有些事&#xff0c;看起来只用一会会儿就能完成&#xff0c;但真正完成起来&#xff0c;总会遇到一些意想不到的困难&#xff01;你一定碰到过这样的情况——开发时间 2 周的项目&#xff0c;搭框架就要用 1 周&#xff0c;刚开发完&#xff0c;各种调试和修 bug又花去 2…