福州大学 2022~2023 学年第 1 学期考试 A 卷压轴题参考答案

 题目:

定义一个抽象类Structure(含有纯虚函数type函数,用以显示当前结构的类型; 含有show函数),
在此基础上派生出Building类, 用来存储一座楼房的层数、房间数以及它的总平方米数。 建立派生
类House,继承Building类,并存储下面的内容:卧室与浴室的数量。另外,建立派生类Office,继承
Building类,并存储灭火器与电话的个数。要求定义各个类的数据成员,成员函数(包括构造函数、
析构函数、显示各数据成员的show()函数,type()函数)。
(1)在完成上述类的基础上,在main函数中定义相应的对象,并测试所有的函数功能。
(2)在main()中,用Office类定义一个对象,请分析此时调用构造函数的顺序和析构函数的顺序。
(3)实现Structure类族中show()函数的动态多态性,要求要在每个层级都实现,并调用测试。
(4)在Office类中重载运算符“<<”,以便通过它来直接对Office类对象内容直接输出。
(5)调用“<<”运算符将Office对象的信息输出到文本文件“d:\\office.txt”中。

程序:

#include<iostream>
#include<fstream>//(5)文件读写操作需要用到的头文件
using namespace std;class Structure {//抽象类
public:virtual void type() = 0;virtual void show() = 0;//(3)纯虚函数,Structure类族动态多态性
};class Building :public Structure {
protected:int floor;//记录层数int room;//记录房间数int square;//记录平方米数
public:Building(int f = 1, int r = 0, int s = 0) {this->floor = f;this->room = r;this->square = s;cout << "the constructor function of Building has been called" << endl;//验证(2)构造函数调用顺序return;}~Building() {cout << "the destructor function of Building has been called" << endl;//验证(2)析构函数调用顺序}
public:virtual void type() {cout << "The type is Building" << endl;return;}virtual void show() {//(3)虚函数,Structure类族动态多态性cout << "floor:" << floor << endl;cout << "room:" << room << endl;cout << "square:" << square << "m^2" << endl;return;}
};class House :public Building {
protected:int bedroom;//记录卧室数int bathroom;//记录浴室数量
public:House(int floor = 1, int room = 0, int square = 0, int bedroom = 0, int bathroom = 0):Building(floor, room, square) {//重载构造函数(参数表法)this->bedroom = bedroom;this->bathroom = bathroom;return;}~House() {	}
public:void type() {cout << "The type is House" << endl;}void show() {cout << "floor:" << floor << endl;cout << "room:" << room << endl;cout << "bedroom:" << bedroom << endl;cout << "bathroom" << bathroom << endl;cout << "square:" << square << "m^2" << endl;return;}
};class Office :public Building {
protected:int hydrant;//记录灭火器数int telephone;//记录电话数
public:Office(int floor = 1, int room = 0, int square = 0, int hydrant = 0, int telephone = 0):Building(floor, room, square) {//重载构造函数(参数表法)this->telephone = telephone;this->hydrant = hydrant;cout << "the constructor function of Office has been called" << endl;//验证(2)构造函数调用顺序return;}~Office() {cout << "The destructor function of Office has been called" << endl;//验证(2)析构函数调用顺序};
public:friend void operator<<(ostream&, Office&);//(4)运算符重载函数声明,流插入运算符只能重载为友元函数
public:void type() {cout << "The type is Office" << endl;}void show() {cout << "floor:" << floor << endl;cout << "room:" << room << endl;cout << "hydrant:" << hydrant << endl;cout << "telephone" << telephone << endl;cout << "square:" << square << "m^2" << endl;return;}
public:void document() {//(5)文件读写操作ofstream outfile("d:\\office.txt", ios::out);if (!outfile) {cerr << "OPEN ERROR!" << endl;exit(1);}outfile << "floor:" << floor << endl;outfile << "room:" << room << endl;outfile << "hydrant:" << hydrant << endl;outfile << "telephone" << telephone << endl;outfile << "square:" << square << "m^2" << endl;return;}
};
void operator <<(ostream& output, Office& of) {//(4)重载运算符,用于直接输出office类cout << "floor:" << of.floor << endl;cout << "room:" << of.room << endl;cout << "hydrant:" << of.hydrant << endl;cout << "telephone" << of.telephone << endl;cout << "square:" << of.square << "m^2" << endl;return;
}int main() {Building bu(2, 3, 100);House ho(2, 4, 100, 3, 2);Office of(3, 10, 300, 5, 4);//(1)测试部分程序bu.show();bu.type();cout << endl;ho.show();ho.type();cout << endl;of.show();of.type();cout << endl;//(4)测试部分程序cout << of;//直接输出office类成员cout << endl;//(5)测试部分程序of.document();return 0;
}

结果:

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

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

相关文章

已解决java.security.acl.AclNotFoundException异常的正确解决方法,亲测有效!!!

已解决java.security.acl.AclNotFoundException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 分析错误日志 检查ACL文件路径和名称 确认系统权限 修改代码逻辑 确保ACL文…

现在这个行情,又又又要开始准备面试了~~

亲爱的程序员朋友们: 这些资料曾经帮助过许多有志之士顺利拿下抖音、快手、阿里等大厂的Offer&#xff0c;现在也希望它们能为你的面试旅程助力&#xff01; 关注【程序员世杰】回复【1024】惊喜等你来拿&#xff01; 截图 关注【程序员世杰】回复【1024】惊喜等你来拿&#xf…

python入门基础知识(错误和异常)

本文部分内容来自菜鸟教程Python 基础教程 | 菜鸟教程 (runoob.com) 本人负责概括总结代码实现。 以此达到快速复习目的 目录 语法错误 异常 异常处理 try/except try/except...else try-finally 语句 抛出异常 用户自定义异常 内置异常类型 常见的标准异常类型 语法…

数据结构---二叉树前中后序遍历

1. 某完全二叉树按层次输出&#xff08;同一层从左到右&#xff09;的序列为 ABCDEFGH 。该完全二叉树的前序序列为() A: ABDHECFG B: ABCDEFGH C: HDBEAFCG D: HDEBFGCA 2. 二叉树的先序遍历和中序遍历如下&#xff1a;先序遍历: EFHIGJK; 中序遍历: HFIEJKG. 则二叉…

Unit redis-server.service could not be found.

我的报错如下Unit redis-server.service could not be found. 关键是刷新后台服务 sudo systemctl daemon-reload启动redis-server sudo systemctl start redis-server查看redis-Server服务状态 sudo systemctl status redis-server

MySQL数据库中的索引知识

MySQL数据库中索引的作用是用来加快数据的查询速度。 索引 index&#xff08;表的层面&#xff09; 在数据库中使用select来查询数据的时候会一条一条得去查询符合要求的数据&#xff0c;而索引就相当于在这张表中依据某一个字段的数值给这张表的数据创建了一个目录。目录帮…

江协科技51单片机学习- p11 静态数码管显示

前言&#xff1a; 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记&#xff0c;在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用&#xff1a; 51单片机入门教程-2…

35.简易远程数据框架的实现

上一个内容&#xff1a;34.构建核心注入代码 34.构建核心注入代码它的调用LoadLibrary函数的代码写到游戏进程中之后无法调用&#xff0c;动态链接库的路径是一个内存地址&#xff0c;写到游戏进程中只把内存地址写过去了&#xff0c;内存地址里的内容没写过去&#xff0c;导致…

Netty ByteBuf 使用详解

文章目录 1.概述2. ByteBuf 分类3. 代码实例3.1 常用方法3.1.1 创建ByteBuf3.1.2 写入字节3.1.3 扩容3.1.2.1 扩容实例3.1.2.2 扩容计算新容量代码 3.1.4 读取字节3.1.5 标记回退3.1.6 slice3.1.7 duplicate3.1.8 CompositeByteBuf3.1.9 retain & release3.1.9.1 retain &a…

Jmeter5.X性能测试【完整版】

目录 一、Http基础协议和解析 1、浏览器的B/S架构和C/S架构 &#xff08;1&#xff09;CS架构 &#xff08;2&#xff09;BS架构 &#xff08;3&#xff09;URL理解 2、Http超文本传输协议 &#xff08;1&#xff09;含义 # 协议 # json协议 # xml协议 &#xff08;…

分布式锁(Redission)

分布式锁&#xff1a; 使用场景&#xff1a; 通常对于一些使用率高的服务&#xff0c;我们会进行多次部署&#xff0c;可能会部署在不同的服务器上&#xff0c;但是他们获取和操作的数据仍然是同一份。为了保证服务的强一致性&#xff0c;我们需要对线程进行加锁&#xff0c;…

WRONGPASS invalid username-password pair or user is disabled

连接redis客户端的时候报错&#xff1a;WRONGPASS invalid username-password pair or user is disabled 当前redis版本为7.2.4 一、问题分析 默认情况下&#xff0c;Redis 7.0 使用默认用户名 default 和空密码进行身份验证。如果未设置 requirepass&#xff0c;则默认用户名…

C++实现自动生成c++类中的属性的get和set方法

目录 应用场景 运行准备 代码展示 结果显示 应用场景 当我们在编写类的属性时&#xff0c;需要对该属性进行封装&#xff0c;需要一系列的get和set的方法。例如下面是天气类的成员属性。可以看到属性很多&#xff0c;而写get和set都是一些固定的操作&#xff0c;因此可以直…

任务4.8.4 利用Spark SQL实现分组排行榜

文章目录 1. 任务说明2. 解决思路3. 准备成绩文件4. 采用交互式实现5. 采用Spark项目实战概述&#xff1a;使用Spark SQL实现分组排行榜任务背景任务目标技术选型实现步骤1. 准备数据2. 数据上传至HDFS3. 启动Spark Shell或创建Spark项目4. 读取数据5. 数据转换6. 创建临时视图…

哈夫曼树及其应用

目录 一、哈夫曼树 1.1基本概念 1.2构造方法 1.3构造算法的实现 二、哈夫曼树的应用 2.1哈夫曼编码 2.2文件的编码和解码 2.2.1编码 2.2.2解码 一、哈夫曼树 1.1基本概念 哈夫曼树又称为最优树&#xff0c;是一类带权路径长度最短的树。 最优二叉树&#xff1a;带权…

Android内核编译

前言 本文描述使用Ubuntu 编译Android内核刷入pixel4一些心得和流程。 PC信息&#xff1a; ./o- jackjackyyyyy- -yyyyyy OS: Ubuntu 22.04 jammy:////-yyyyyyo Kernel: x86_64 Linux 6.5.0-35-generic. .://-.sss/ Uptime: 1d 5h 4m.:o: //:--:/- …

C++入门 vector部分模拟实现

目录 vector大致框架 vector常见接口模拟实现 begin迭代器 & end迭代器 capacity( ) & size( ) reserve operator[ ] push_back( ) & pop_back( ) sort vector大致框架 vector的内部的成员变量大概有三部分构成&#xff1a; namespace bit {template<c…

【Java算法】滑动窗口 上

&#x1f525;个人主页&#xff1a; 中草药 &#x1f525;专栏&#xff1a;【算法工作坊】算法实战揭秘 &#x1f456;一. 长度最小的子数组 题目链接&#xff1a;209.长度最小的子数组 算法原理 滑动窗口 滑动窗口算法常用于处理数组/字符串等序列问题&#xff0c;通过定义一…

Java赋值运算符

Java赋值运算符分为以下&#xff1a; 符号 作用 说明 赋值 int a 10,把10赋值给变量a 加后赋值 ab,将ab的值赋值给变量a - 减后赋值 a-b,将a-b的值赋值给变量a* 乘后赋值 a*b,将a*b的值赋值给变量a / 除后赋值 a/b,将a/b的值赋值给变量a % 取余赋值 a%b,将a%b的值赋值给变量…

贪心算法—

贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。这种算法并不总是能找到全局最优解&#xff0c;但在某些问题上能提供足够好的解决方案。贪心算法的关键特性包括&#…