C++大学教程(第九版)自测练习题9.2 (详细解释+改正后代码)

news/发布时间2024/5/15 16:27:52

自测练习题9.2

(虽然已给出答案,但其中有些地方自己弄的不是很清楚,

所以写一篇文章记录以下问题和解释)

目录

9.2找出下列各题中的错误,并说明如何改正

a)假设在Time类中声明了以下原型:

修改后代码:

b)下面是Time类的部分定义:

修改后的代码:(比较完整的写法)

补充知识:隐式和显式初始化

c)假设在Employee类中声明了以下原型:

修改后代码


9.2找出下列各题中的错误,并说明如何改正

a)假设在Time类中声明了以下原型:

void ~Time(int);

错误:不允许析构函数返回值(或者指定返回类型)或者接收参数。

改正:删除声明中的返回类型void 和参数int

修改后代码:

~Time();

b)下面是Time类的部分定义:

int Employee(string,string);

错误:不能在类定义中显式的初始化;

改正:从类定义中删除显式的初始化,并在构造函数中初始化数据成员。

解释:本题的Employee成员函数,接受了两个string类型的参数,这个成员函数的实现包括了利用成员初始化器进行的显式的初始化,因此错误在于应该在构造函数Time中对类的数据成员进行显式的初始化操作。

修改后的代码:(比较完整的写法)

class Time {
public:Time(string name, string department);  // 构造函数声明(实际修改后的代码这一行即可)private:string name;string department;
};// 构造函数的定义
Time::Time(string name, string department) : name(name), department(department) {// 在构造函数中对数据成员进行**显式**初始化}

补充知识 (隐式和显式初始化) :

在 C++ 中,成员变量的初始化可以分为两种方式:隐式初始化和显式初始化。

  1. 隐式初始化:当成员变量没有在构造函数的成员初始化列表中显式初始化时,它们将被隐式初始化。隐式初始化将会使用默认的初始化方式,例如对于基本数据类型,将会被初始化为零或默认值;对于类对象,将会调用默认构造函数进行初始化。

  2. 显式初始化:当成员变量在构造函数的成员初始化列表中显式指定了初始值时,就称为显式初始化。通过成员初始化列表,可以在创建对象时为成员变量指定特定的初始值,而不依赖于默认构造函数的行为。

class Example {//举例子
public:int a;      // 隐式初始化,默认为未定义的值int b = 5;  // 隐式初始化为 5int c;      // 隐式初始化,默认为未定义的值Example(int value) : c(value) {// 成员初始化列表中显式初始化 c// 其他成员变量 a, b 将使用隐式初始化}
};

c)假设在Employee类中声明了以下原型:

class Example
{
public:Example(int y=10):date(y){//empty body}int getIncrementedData () const{return ++data;}//end function getIncrementedDatastatic int getCount(){cout<<"Data is "<<data<<endl;return count;}//end function getCount
private:int data;static int count;};//end class Example

错误1:不允许构造函数返回值

改正:不存在该错误!!!int指的是参数的类型,如果employee的对象,没有给参数,那么int y=10是默认对参数进行初始化

错误2:Example的类定义有两处错误。

        1)在getIncrementedData()函数中,声明为const,但是修改了对象。

        改正:删除const即可。

        2)在getCount()函数中,其中函数声明为static,所以不允许访问该类的任何非static成员。

        改正:删除输出行 cout<<"Data is "<<data<<endl; 即可

修改后代码

class Example
{
public:Example(int y=10):date(y){//empty body}int getIncrementedData () //删除const{return ++data;}//end function getIncrementedDatastatic int getCount(){//cout<<"Data is "<<data<<endl;删除该行return count;}//end function getCount
private:int data;static int count;};//end class Example

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

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

相关文章

LiteOS-M代码分析-系统初始化los_init.c

目录 一、LiteOS-M 初始化内核二、LOS_KernelInit代码分析三、LOS_Start代码解析坚持就有收获 一、LiteOS-M 初始化内核 在LiteOS-M应用程序中&#xff0c;系统初始化如下&#xff1a; /*** brief This is the ohos entry, and you could call this in your main funciton af…

【教3妹学编程-算法题】匹配模式数组的子数组数目 I

3妹&#xff1a;2哥2哥&#xff0c;你有没有看到上海女老师出轨男学生的瓜啊。 2哥 : 看到 了&#xff0c;真的是太毁三观了&#xff01; 3妹&#xff1a;是啊&#xff0c; 老师本是教书育人的职业&#xff0c;明确规定不能和学生谈恋爱啊&#xff0c;更何况是出轨。 2哥 : 是啊…

【Pytorch深度学习开发实践学习】B站刘二大人课程笔记整理lecture05 构建线性模型

lecture05 构建线性模型 课程网址 Pytorch深度学习实践 部分课件内容 import torchx_data torch.tensor([[1.0],[2.0],[3.0]]) y_data torch.tensor([[2.0],[4.0],[6.0]])class LinearModel(torch.nn.Module):def __init__(self):super(LinearModel, self).__init__()self.lin…

LeetCode每日刷题:101. 对称二叉树

题目&#xff1a; 解题思路&#xff1a;可以新写一个函数&#xff0c;从root开始&#xff0c;root的left的头结点将记为lefttree&#xff08;左子树&#xff09;,root的lright的头结点将记为righttree&#xff08;右子树&#xff09;&#xff0c; 然后递归左子树的root.left与右…

智能合约,数据资产变现金的一把金钥匙?

大数据产业创新服务媒体 ——聚焦数据 改变商业 在数字时代的黎明&#xff0c;数据不仅是知识的载体&#xff0c;更成为了经济增长的新引擎。在这个由数据驱动的世界里&#xff0c;数据资产如同新发现的矿藏&#xff0c;蕴藏着无限的潜力和价值。 然而&#xff0c;随着这些数字…

【机器学习笔记】 15 机器学习项目流程

机器学习的一般步骤 数据清洗 数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序&#xff0c;包括检查数据一致性&#xff0c;处理无效值和缺失值等。与问卷审核不同&#xff0c;录入后的数据清理一般是由计算机而不是人工完成。 探索性数据分析(EDA 探索性数据…

基于Java+小程序点餐系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

AIGC 实战:如何使用 Docker 在 Ollama 上离线运行大模型(LLM)

Ollama简介 Ollama 是一个开源平台&#xff0c;用于管理和运行各种大型语言模型 (LLM)&#xff0c;例如 Llama 2、Mistral 和 Tinyllama。它提供命令行界面 (CLI) 用于安装、模型管理和交互。您可以使用 Ollama 根据您的需求下载、加载和运行不同的 LLM 模型。 Docker简介 D…

搭建SQL 注入平台

sqli-labs是一款学习SQL 注入的开源平台&#xff0c;共有75种不同类型的注入&#xff0c;在本书 的同步网站下载完压缩包后并解压&#xff0c;复制源码然后将其粘贴到网站的目录中&#xff0c;进入 MySQL 管理中的phpMyAdmin, 打开http://127.0.0.1/phpMyAdmin/, 在数据库…

使用RegNet替换YOLOX中原始的Backbone

使用mmdetection 中的RegNet bcakbones替换YOLOX中原始的Backbone 将mmdet/models/backbones/regnet.py中相关的代码复制到YOLOX中&#xff0c;并进行适配 注意通道数要适配 in_channels [64, 160, 384] &#xff0c;可以通过调试后&#xff0c;先运行到后后端输出结果出&a…

运维SRE-08 网络基础与进阶

今日内容 - **定时备份案例进阶.** - **定时巡检(检查系统基础指标),写入到文件中.** - 网络(抽象) 掌握与吸收时间: 直到课程结束.(第2阶段结束) - 网络基础: 网络概述,网络结构,网络设备. - 网络核心: OSI7层模型 ※※※※※※TCP/IP 3次握手 ※※※※※※TCP/IP 4…

前端架构: 实现脚手架终端UI样式之ANSI escape code, Chalk, Ora介绍

在脚手架当中实现命令行的UI显示 1 &#xff09;概述 在命令行中&#xff0c;如果想实现除传统的常规文本以外的内容比如想对字体进行加粗斜体下划线&#xff0c;包括对它改变颜色改变前景色改变后景色等等需要借助一个叫做 ANSI escape code 这样的一个概念它其实是一个标准&…

Linux安装docker(CentOS)

1.下载工具 yum install -y yum-utils2.设置镜像的仓库 yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.更新yum软件包索引 yum install docker-ce docker-ce-cli containerd.io4.安装docker相关配置 yum install do…

【web安全】渗透测试实战思路

步骤一&#xff1a;选目标 1. 不建议太小的公司&#xff08;可能都是请别人来开发的&#xff0c;用现成成熟的框架&#xff09; 2. 不建议一线大厂&#xff1a;腾讯&#xff0c;字节&#xff0c;阿里等&#xff0c;你懂的 3. 不建议政府部门&#xff0c;安全设备多&#xff…

【C语言】注释

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

线性代数:向量空间

目录 向量空间 Ax 0 的解空间S Ax b 的全体解向量所构成集合不是向量空间 基、维数、子空间 自然基与坐标 例1 例2 向量空间 Ax 0 的解空间S Ax b 的全体解向量所构成集合不是向量空间 基、维数、子空间 自然基与坐标 例1 例2

大厂的数据质量中心系统设计

日常工作中&#xff0c;数据开发上线完一个任务后并不是就可以高枕无忧&#xff0c;时常因上游链路数据异常或者自身处理逻辑的 BUG 导致产出的数据结果不可信。而问题发现可经历较长周期&#xff08;尤其离线场景&#xff09;&#xff0c;往往是业务方通过上层数据报表发现数据…

MySQL进阶 - 备份与恢复

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…

软件常见设计模式

设计模式 设计模式是为了解决在软件开发过程中遇到的某些问题而形成的思想。同一场景有多种设计模式可以应用&#xff0c;不同的模式有各自的优缺点&#xff0c;开发者可以基于自身需求选择合适的设计模式&#xff0c;去解决相应的工程难题。 良好的软件设计和架构&#xff0…
推荐文章