福州大学 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,一经查实,立即删除!

相关文章

[Django学习]查询过滤器(lookup types)

1.exact exact用于精确匹配字段的值。适用于需要精确查找某个字段值的场景。 Book.objects.filter(title__exactHarry Potter) 上面的查询会查找标题完全为“Harry Potter”的书籍。 2.iexact iexact忽略大小写地精确匹配字段的值。适用于需要忽略大小写进行精确匹配的场…

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

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

安卓浏览器区分启动、打开、分享

搞了几个钟头&#xff0c;终于全兼容了&#xff0c;分享有2种类型&#xff01; void getDataFromIntent(Intent intent) {if (intent.getAction().equals(Intent.ACTION_VIEW)) {urln intent.getDataString();if (urln ! null) {if (urln.contains("\n"))urln url…

数据分析方法之对比思维

数据分析方法论 对比分析是将两个或两个以上具有可比性的数据进行比较&#xff0c;分析其中的差异&#xff0c;以揭示事物的发展规律。 数据分析之对比思维 归纳方法——穆勒五法&#xff1a;分别是求同法、求异法、共用法、共变法、剩余法。求同法&#xff1a;比相同 2.1求…

利用 Python 和 AI 技术制作智能问答机器人

利用 Python 和 AI 技术制作智能问答机器人 引言 在人工智能的浪潮下&#xff0c;智能问答机器人成为了一种非常实用的技术。它们能够处理大量的查询&#xff0c;提供即时的反馈&#xff0c;并且可以通过机器学习技术不断优化自身的性能。本文将介绍如何使用 Python 来开发一…

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

亲爱的程序员朋友们: 这些资料曾经帮助过许多有志之士顺利拿下抖音、快手、阿里等大厂的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. 则二叉…

exe4j使用笔记(jar包转exe工具)

文章目录 配置项1. Welcome2. Project type3. Application info4. Executable info5. Java invocation6. JRE7. Splash screen8. Messages9. Compile executable10. Finished 其他下载地址(官网地址??) 配置项 总共10个配置项。 1. Welcome 略(不用填) 2. Project type …

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…

如何处理Android应用程序的内存泄漏

如何处理Android应用程序的内存泄漏 在Android开发中&#xff0c;内存泄漏是一个常见且重要的问题。当应用程序不再需要某些对象时&#xff0c;但由于某种原因这些对象仍然被引用&#xff0c;导致它们不能被垃圾回收器&#xff08;Garbage Collector&#xff09;回收&#xff…

Cesium中的线性代数和计算机图形学知识介绍

目录 前言1.基础介绍1.1 线性代数1.1.1 向量 (Vectors)1.1.2 矩阵 (Matrices)1.1.3 四元数 (Quaternions) 1.2 计算机图形学1.2.1 投影变换 (Projection Transformations)1.2.2 视图变换 (View Transformations)1.2.3 模型变换 (Model Transformations)1.2.4 光照与着色 (Light…

Java 面试题:强引用、软引用、弱引用、幻象引用有什么区别?

在 Java 中&#xff0c;理解不同类型引用的区别对于掌握内存管理和垃圾回收机制是至关重要的。强引用、软引用、弱引用和幻象引用分别提供了不同的对象引用强度&#xff0c;使开发者能够精细控制对象的生命周期和内存使用情况。 强引用&#xff08;Strong Reference&#xff09…

rapidjson使用中crash问题分析

问题 在使用rapidjson时&#xff0c;使用Document的Parse方法解析json字符串&#xff0c;程序crash。 分析 可以参考https://github.com/Tencent/rapidjson/issues/1269&#xff0c;由于rapidjson的内存分配器默认认为内存分配成功&#xff0c;没有对分配后做判空判断&#…

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;…