福州大学 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;
}

结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Type-C连接器厂商对检测实验室的要求及重要性解析

Type-C连接器厂商对检测实验室的要求与重要性 Type-C连接器作为一种高速、全功能的接口标准&#xff0c;被广泛应用于各类电子产品中。作为Type-C连接器的制造商&#xff0c;对于产品的质量和性能要求是至关重要的。为了确保产品符合规范并满足市场需求&#xff0c;Type-C连接…

链动2+1模式:解锁用户留存与复购的增长密码

大家好&#xff0c;我是吴军&#xff0c;来自一家业界领先的软件开发公司&#xff0c;专注于为用户打造卓越的产品体验。今天&#xff0c;我想与大家探讨一个在我们产品运营中取得显著成效的策略——链动21模式&#xff0c;以及它是如何助力我们提升用户留存和复购率的。 尽管链…

跟TED演讲学英文:How language shapes the way we think by Lera Boroditsky

How language shapes the way we think Link: https://www.ted.com/talks/lera_boroditsky_how_language_shapes_the_way_we_think? Speaker: Lera Boroditsky Date: November 2017 文章目录 How language shapes the way we thinkIntroductionVocabularySummaryTranscriptA…

6.25世界白癜风日·成都博润白癜风医院获评“成都市医学重点专科”

夏日热情如江潮&#xff0c;勇攀高峰正当时。为激发新质生产力&#xff0c;驱动学术研究引领医院发展&#xff0c;也为了迎接 6.25 世界白癜风日。 6月22日&#xff0c;成都博润白癜风医院隆重举行成都市医学重点专科授牌新闻发布会暨成都市市级继续医学教育项目《难治性白癜风…

PythonScrapy爬虫被ban的一些解决办法

大多数python写爬虫都是当做工具在用&#xff0c;爬虫过程中都会遇到命中反爬导致无法继续访问。访问出现500或者其他服务器禁止错误&#xff0c;像下面这样 在这之前&#xff0c;默认你已经了解python及scrapy。具体selenium的使用方法可以查阅官方文档。 我的处理办法&#x…

Playwright-html-report源码解析

执行命令生成html格式报告 Playwright在执行完成测试&#xff0c;支持生成html格式的测试报告&#xff0c;如下图所示&#xff0c;使用"npx playwright test"执行测试&#xff0c;执行完成后&#xff0c;会提示“npx playwright show-report”命令。执行该命令&#…

Qt Object:智能即时聊天室项目

目录 1.项目介绍 2.设计思路 3.Pro文件配置 4.项目演示 5.项目开源 项目介绍 智能即时聊天室系统&#xff08;AIChatProject&#xff09;是一个高效、灵活的即时通讯解决方案。它融合了百度的开源大型语言模型——文心一言&#xff0c;通过API接口实现深度集成。系统专为聊天和…

文件上传漏洞-下篇

一、白名单绕过 目录路径检测绕过 00截断 简介&#xff1a; 0x00是字符串的结束标识符&#xff0c;攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断&#xff0c;而后面的内容又可以帮助我们绕过检测。 饶过条件 利用操作&#xff1a;Pass-12 要求&#xff…

关于application/x-www-form-urlencoded跟application/json请求的区别

当你的java方法是这样定义的 PostMapping("/rePushMedicalRecord") public String rePushMedicalRecord(RequestParam("topicId") String topicId){ } 参数是RequestParam接收&#xff0c;则请求时需要用application/x-www-form-urlencoded请求 如果是R…

多重排序【今日题记】

多重排序 多重排序题目分析思路代码代码结构体知识多重排序 需要对多个条件进行排序,因此可以称之为多重排序。 题目 某生物实验室记录了n种(n<=1000)病毒信息,每种病毒都有编号、传染性和致病性三个基本信息,编号是1000-9999的人工编号,其中的传染性和致病性是用0-10…

移动端的HSR技术

overdraw问题&#xff1a; overdraw顾名思义就是过度绘制&#xff0c;就是在渲染过程中**绘制一帧FBO&#xff08;或者RenderTarget&#xff09;**超过一次相同像素的现象!这个是CG的问题&#xff01;特别在是用来大量的透明混合的情况下会产生的&#xff0c;当然客户端andrio…

艾多美用“艾”为生命加油,献血活动回顾

用艾为生命加油 6月10日~16日&#xff0c;艾多美中国开启献血周活动&#xff0c;已经陆续收到来自烟台总部、山东、广东、河南、四川、重庆、贵阳&#xff0c;乌鲁木齐&#xff0c;吉林&#xff0c;等地区的艾多美员工、会员、经销商发来的爱心助力&#xff0c;截止到目前&…

KIVY BLOG Kivy tutorial 007: Introducing kv language

Kivy tutorial 007: Introducing kv language – Kivy Blog DECEMBER 18, 2019 BY ALEXANDER TAYLOR Kivy tutorial 007: Introducing kv language Kivy 导师课007&#xff1a; 介绍kv语言 Central themes: kv language, building a gui, integration with Python 中心主题:…

【React】富文本编辑器react-quill

安装 react-quill 富文本编辑器 npm i react-quill2.0.0-beta.2报错解决&#xff1a; npm i react-quill2.0.0-beta.2 --legacy-peer-deps导入编辑器组件和配套样式文件 import ReactQuill from react-quill // 1 import react-quill/dist/quill.snow.css // 2const Publi…

JR-8000系列机架式多路4K超高清光端机

集中式 4K超高清光传输设备 1 产品特性 ⚫ 支持高达 8 通道 SMPTE 全格式 SDI 信号输入 ⚫ 发送端带有 LOOPOUT 环出端口&#xff0c;具备消抖动功能&#xff0c;可作为信号调理或级联信号源使用 ⚫ 接收端支持双输出端口 ⚫ 支持传输速率&#xff1a;143Mbps-11.88Gbps ⚫…

Redis源码学习:ziplist的数据结构和连锁更新问题

ziplist ziplist 是 Redis 中一种紧凑型的列表结构&#xff0c;专门用来存储元素数量少且每个元素较小的数据。它是一个双端链表&#xff0c; 可以在任意一端进行压入/弹出操作&#xff0c;并且该操作的时间复杂度为O(1)。 ziplist数据结构 <zlbytes><zltail>&l…

CS162 Operating System-lecture2

A tread is suspended or no longer executing when its state’s not loaded in registers the point states is pointed at some other thread .so the thread that’s suspended is actually siting in memory and not yet executing or not executing at all with some thi…

Antd Table 表格 拖拽列宽

antd 的表格组件的列宽&#xff0c;是通过width属性去初始化的&#xff0c;有时候渲染的内容不固定&#xff0c;这个宽做不到通用所以研究怎么实现表格列宽拖动&#xff0c;主要的实现步骤如下&#xff1a; 使用table的components API修改表格头部为 react-resizable提供的组件…

实验13 BGP路径选择

实验13 BGP路径选择 一、 原理描述二、 实验目的三、 实验内容四、 实验配置五、 实验步骤 一、 原理描述 与域内路由不同&#xff0c;域间路由更加注重策略&#xff0c;而不是技术。在域内进行选路&#xff0c;可以使用路由算法计算出到达目的子网的最短路径&#xff1b;而在…

cocos 如何使用九宫格图片,以及在微信小程序上失效。

1.在图片下方&#xff0c;点击edit。 2.拖动线条&#xff0c;使四角不被拉伸。 3.使用。 其他 在微信小程序上失效&#xff0c;需要将packable合图功能取消掉。