深圳大学计软《面向对象的程序设计》实验8 静态与友元
A. 旅馆旅客管理(静态成员)
题目描述
编写程序,实现某旅馆的客人住宿记录功能。
定义一个Customer类,要求输入客人的姓名,创建一个Customer对象。类声明如下:
调用类的Display函数输出客人ID(输出顺序号占4位,如第1位为0001,第2位为0002,依此类推)、姓名、总人数。总人数和客人租金用静态成员,其他属性采用普通的数据成员。
输入
输入测试次数t
对于每次测试,首先输入当前年份,
接下来依次输入顾客姓名,0表示输入结束。
输出
每行依次输出顾客信息和旅馆信息。包括顾客姓名,顾客编号,旅馆入住总人数,旅馆当前总收入。
输入样例1
2
2014
张三 李四 王五 0
2015
Cindy David 0
输出样例1
张三 20140001 1 150
李四 20140002 2 300
王五 20140003 3 450
Cindy 20150004 4 600
David 20150005 5 750
AC代码
#include<bits/stdc++.h>
using namespace std;class Customer {static int TotalCustNum;static int Rent;static int Year;int CustID;string name;
public:Customer(string name) :name(name) {Rent += 150;TotalCustNum++;CustID = TotalCustNum;}~Customer() { name.clear(); }static void changeYear(int r) {Year = r;}void Display() {cout << name << " " << Year;cout << setfill('0') << setw(4) << CustID << " " << CustID << " " << Rent << endl;}static void init() {TotalCustNum = 0;Rent = 0;}
};int Customer::TotalCustNum = 0;
int Customer::Rent = 0;
int Customer::Year = 0;int main() {int t;cin >> t;for (int i = 0; i < t; i++) {//Customer::init();int year;cin >> year;string name;cin >> name;int j = 1;while (name != "0") {Customer test(name);Customer::changeYear(year);test.Display();cin >> name;}}return 0;
}
B. 距离计算(友元函数)
题目描述
Point类的基本形式如下:
请完成如下要求:
- 实现Point类;
- 为Point类增加一个友元函数double Distance(Point &a, Point &b),用于计算两点之间的距离。直接访问Point对象的私有数据进行计算。
- 编写main函数,输入两点坐标值,计算两点之间的距离。
输入
第1行:输入需计算距离的点对的数目
第2行开始,每行依次输入两个点的x和y坐标
输出
每行依次输出一组点对之间的距离(结果直接取整数部分,不四舍五入)
输入样例1
2
1 0 2 1
2 3 2 4
输出样例1
1
1
AC代码
#include<bits/stdc++.h>
using namespace std;class Point {double x, y;
public:Point(double xx, double yy) {x = xx;y = yy;}friend double Distance(Point& a, Point& b) {return sqrt(pow(b.x - a.x, 2) + pow(a.y - b.y, 2));}
};int main() {int t;cin >> t;while (t--){double a, b, c, d;cin >> a >> b >> c >> d;Point p1(a, b), p2(c, d);cout << int(Distance(p1, p2)) << endl;}return 0;
}
C. 日期时间合并输出(友元函数)
题目描述
已知日期类Date,有属性:年、月、日,其他成员函数根据需要自行编写,注意该类没有输出的成员函数
已知时间类Time,有属性:时、分、秒,其他成员函数根据需要自行编写,注意该类没有输出的成员函数
现在编写一个全局函数把时间和日期的对象合并起来一起输出,
函数原型为:void Display(Date &, Time &)
函数输出要求为:
1、时分秒输出长度固定2位,不足2位补0
2、年份输出长度固定为4位,月和日的输出长度固定2位,不足2位补0
例如2017年3月3日19时5分18秒
则输出为:2017-03-03 19:05:18
程序要求
1、把函数Display作为时间类、日期类的友元
2、分别创建一个日期对象和时间对象,保存日期的输入和时间的输入
3、调用Display函数实现日期和时间的合并输出
输入
第一行输入t表示有t组示例
接着一行输入三个整数,表示年月日
再接着一行输入三个整数,表示时分秒
依次输入t组示例
输出
每行输出一个日期和时间合并输出结果
输出t行
输入样例1
2
2017 3 3
19 5 18
1988 12 8
5 16 4
输出样例1
2017-03-03 19:05:18
1988-12-08 05:16:04
AC代码
#include<bits/stdc++.h>
using namespace std;class Time;
class Date {int year, month, day;string name[12] = { "January","February","March","April","May","June","July","August","September","October","November","December" };
public:Date() { cin >> year >> month >> day; }friend void Display(Date& date, Time& time);
};class Time {int year, minute, second;
public:Time() { cin >> year >> minute >> second; }friend void Display(Date& date, Time& time);
};void Display(Date& date, Time& time) {cout <<setfill('0')<<setw(4)<< date.year << "-";cout <<setfill('0') << setw(2) << date.month << "-";cout << setfill('0') << setw(2) << date.day << " ";cout << setfill('0') << setw(2) << time.year << ":";cout << setfill('0') << setw(2) << time.minute << ":";cout << setfill('0') << setw(2) << time.second << endl;
}int main() {int t;cin >> t;while (t--) {Date d;Time t;Display(d, t);}return 0;
}
D. 判断矩形是否重叠(复合类+友元)
题目描述
用CPoint表示点,用两个CPoint对象表示矩形类CRect的对角线两点。分别实现CPoint类和CRect类,并在主函数用输入的坐标定义4个CPoint类对象,每2个CPoint对象再构造1个CRect对象,然后写个友元函数,判断2个矩形是否重叠。
输入
判断次数
矩形1的对角线顶点坐标x1, y1, x2, y2
矩形2的对角线顶点坐标x1, y1, x2, y2
…
输出
是否重叠
输入样例1
3
1 5 2 9
1 3 2 4
5 6 7 8
5 7 7 7
2 5 1 0
9 4 2 9
输出样例1
not overlapped
overlapped
overlapped
AC代码
#include<bits/stdc++.h>
using namespace std;class CRect;class CPoint {double x, y;
public:CPoint() { cin >> x >> y; }friend bool isOverlap(CRect& c1, CRect& c2);
};class CRect {CPoint p1, p2;
public:CRect(CPoint& p1, CPoint& p2):p1(p1),p2(p2){}friend bool isOverlap(CRect& c1, CRect& c2);
};bool isOverlap(CRect& c1, CRect& c2) {int c1up = max(c1.p1.y, c1.p2.y);int c1down = min(c1.p1.y, c1.p2.y);int c1left = min(c1.p1.x, c1.p2.x);int c1right = max(c1.p1.x, c1.p2.x);int c2up = max(c2.p1.y, c2.p2.y);int c2down = min(c2.p1.y, c2.p2.y);int c2left = min(c2.p1.x, c2.p2.x);int c2right = max(c2.p1.x, c2.p2.x);if (c1up < c2down)return false;if (c1down > c2up)return false;if (c1left > c2right)return false;if (c2left > c1right)return false;return true;}int main() {int t;cin >> t;while (t--) {CPoint p1, p2, p3, p4;CRect c1(p1, p2), c2(p3, p4);if (isOverlap(c1, c2))cout << "overlapped" << endl;elsecout << "not overlapped" << endl;}return 0;
}
E. 银行账户(静态成员与友元函数)
题目描述
银行账户类的基本描述如下:
要求如下:
实现该银行账户类
为账户类Account增加一个友元函数,实现账户结息,要求输出结息后的余额(结息余额=账户余额+账户余额*利率)。友元函数声明形式为 friend void Update(Account& a);
在main函数中,定义一个Account类型的指针数组,让每个指针指向动态分配的Account对象,并调用成员函数测试存款、取款、显示等函数,再调用友元函数测试进行结息。
大家可以根据实际需求在类内添加其他方法,也可以修改成员函数的参数设置
输入
第1行:利率
第2行:账户数目n
第3行开始,每行依次输入一个账户的“账号”、“姓名”、“余额”、存款数,取款数。
输出
第1行开始,每行输出一个账户的相关信息,包括账号、姓名、存款后的余额、存款后结息余额、取款后余额。
最后一行输出所有账户的余额。
输入样例1
0.01
3
201501 张三 10000 1000 2000
201502 李四 20000 2000 4000
201503 王二 80000 4000 6000
输出样例1
201501 张三 11000 11110 9110
201502 李四 22000 22220 18220
201503 王二 84000 84840 78840
106170
AC代码
#include<bits/stdc++.h>
using namespace std;class Account {static float TotalBalance;static int count;static float InterestRate;string _accno, _accname;float _banlance;float save, withdraw;
public:Account() {cin >> _accno >> _accname >> _banlance >> save >> withdraw;}static float getTotalBalance() {return TotalBalance;}friend void Update(Account& a) {a._banlance += a.save;a._banlance *= (1 + a.InterestRate);cout << a._banlance << " ";a._banlance -= a.withdraw;cout << a._banlance << endl;a.TotalBalance += a._banlance;}~Account(){}void Show() {cout << _accno << " " << _accname << " " << _banlance +save << " ";}static int GetCount() { return count; }static float GetInterestRate() { return InterestRate; }static void changeRate() {cin >> InterestRate;}};int Account::count = 0;
float Account::InterestRate = 0;
float Account::TotalBalance = 0;int main() {Account::changeRate();int n;cin >> n;Account* account = new Account[n];for (int i = 0; i < n; i++) {(account + i)->Show();Update(*(account + i));}cout << Account::getTotalBalance() << endl;delete[]account;return 0;
}
F. 电视机与遥控器(友元类)
题目描述
有如下的电视类和遥控器类,遥控器在电视开机的情况下可以控制电视。
要求如下:
-
实现并完善Tv类;其中构造函数需修改和完善。另:最大频道为100;
-
将Remote设为Tv的友元类,以支持在Remote类中对Tv方法的调用。
-
在main函数中,通过Remote实例对TV实例进行操作。
输入
第一行,电视初始状态,依次为state,volume,channel,mode,input的初始值。
第二行,利用遥控器对上述状态的操作指令,用对应的函数名表示,如增加音量为volup
输出
第一行,执行遥控器操作后的状态。
输入样例1
off 10 19 Cable VCR
onoff volup chanup set_mode set_input
输出样例1
on 11 20 Antenna TV
AC代码
#include<bits/stdc++.h>
using namespace std;class TV {int state, volume, maxchannel, channel, mode, input;friend class Remote;
public:TV() {string _state, _mode, _input;cin >> _state >> volume >> channel >> _mode >> _input;_state == "on" ? state = 1 : state = 0;_mode == "Cable" ? mode = 0 : mode = 1;_input == "TV" ? input = 1 : input = 0;}void onoff() {state = !state;}bool isOn()const {return state;}bool volup() {if (!isOn())return false;volume++;if (volume > 20)return false;return true;}bool voldown() {if (!isOn())return false;volume--;if (volume < 0)return false;volume = 0;}void chanup() {if (!isOn())return;channel++;if (channel > 100)channel = 100;}void chandown() {if (!isOn())return;channel--;if (channel < 0)channel = 0;}void set_chan() {if (!isOn())return;channel = !channel;}void set_mode() {if (!isOn())return;mode = !mode;}void set_input() {if (!isOn())return;input = !input;}void settings() {if (state)cout << "on ";elsecout << "off ";cout << volume << " " << channel << " ";if (!mode)cout << "Cable ";elsecout << "Antenna ";if (!input)cout << "VCR" << endl;elsecout << "TV" << endl;}int getMode() { return mode; }};class Remote {int mode;
public:Remote(int m) :mode(m) {}bool volup(TV& t) { return t.volup(); }bool voldown(TV& t) { return t.voldown(); }void onoff(TV& t) { t.onoff(); }void chanup(TV& t) { t.chanup(); }void chandown(TV& t) { t.chandown(); }void set_chan(TV& t, int c) { t.channel = c; }void set_mode(TV& t) { t.set_mode();}void set_input(TV& t) { t.set_input(); }
};int main() {TV t;Remote r(t.getMode());string s;while(cin >> s) {if (s == "onoff")r.onoff(t);else if (s == "volup")r.volup(t);else if (s == "voldown")r.voldown(t);else if (s == "set_mode")r.set_mode(t);else if (s == "set_input")r.set_input(t);else if (s == "chanup")r.chanup(t);else if (s == "chandown")r.chandown(t);} t.settings();return 0;
}
相关文章:
深圳大学计软《面向对象的程序设计》实验8 静态与友元
A. 旅馆旅客管理(静态成员) 题目描述 编写程序,实现某旅馆的客人住宿记录功能。 定义一个Customer类,要求输入客人的姓名,创建一个Customer对象。类声明如下: 调用类的Display函数输出客人IDÿ…...
【基础算法】单链表的OJ练习(2) # 链表的中间结点 # 链表中倒数第k个结点 #
文章目录前言链表的中间结点链表中倒数第k个结点写在最后前言 对于单链表的OJ练习,需要深刻理解做题的思路,这样我们才能够在任何场景都能够熟练的解答有关链表的问题。 关于OJ练习(1):-> 传送门 <-,…...
vue路由文件拆分管理
随着项目的原来越大,路由越来越多,我们的路由也会越来越多,如果都集中在一个文件中,会很冗杂文件很长。这时候我们可以将路由文件拆分,可读、方便管理。多人合作添加路由也能更多的避免代码冲突 代码拆分目录如图&…...
实例解析Java反射
反射是大多数语言里都必不不可少的组成部分,对象可以通过反射获取他的类,类可以通过反射拿到所有方法(包括私有),拿到的方法可以调用,总之通过“反射”,我们可以将Java这种静态语言附加上动态特…...
Android 9适配经验总结
目录四大组件适配Activity启动方式适配Service启动方式适配前台服务需要添加权限限制静态广播的接收限制ContentResolver数据更新操作权限与安全相关主要适配点运行时动态权限申请默认不支持 http 请求SharedPreferences 适配四大组件适配 Android 应用的开发离不开 Android 四…...
定时任务调度方案——Xxl-Job
定时任务调度方案 随着系统规模的发展,项目的组织结构以及架构越来越复杂,业务覆盖的范围越来越广,定时任务数量日益增多,任务也变得越来越复杂,尤其是为了满足在用户体量日历增大时,系统能够稳定运行&…...
操作系统引导
操作系统是一种程序,程序以数据的形式存放在硬盘中,而硬盘通常分为多个区,一个计算机中又有多个或多种外部设备。 操作系统引导指的是计算机利用CPU运行特定程序,通过程序识别硬盘,识别硬盘分区,识别硬盘分…...
[C#] 多线程单例子,分为阻塞型和分阻塞型, 在unity里的应用
在单例中使用多线程时,需要注意以下几点: 线程安全:在多线程环境下,单例对象可能被多个线程同时访问,因此需要确保单例的线程安全,避免出现数据竞争等问题。 对象创建:如果在单例对象的构造函数…...
使用MAT进行内存分析,并找到OOM问题
前言 在处理一次现场问题时,发现服务还在运行,但是出现假死情况,后通过分析GC日志以及使用MAT分析确定问题是内存溢出OutOfMemery(OOM);这里只记录MAT分析学习过程,最近工作忙,补记录。 GC日志分析 首先,如…...
初识Python
目录初识Python1.Python简介Python的优缺点Python的应用领域2.安装Python解释器Windows环境Linux环境macOS环境3.运行Python程序确认Python的版本编写Python源代码运行程序代码中的注释4.Python开发工具IDLE - 自带的集成开发工具IPython - 更好的交互式编程工具Sublime Text -…...
tmux终端复用软件
一、安装[rootpool-100-1-1-159 test]# yum install tmux [rootpool-100-1-1-159 test]# yum search tmux Repository extras is listed more than once in the configuration Last metadata expiration check: 0:33:52 ago on Fri 03 Mar 2023 09:10:34 AM CST.Name Exactly M…...
IO详解(文件,流对象,一些练习)
目录 文件 文件概念 文件的路径 路径有俩种表示风格 文件类型 如何区分文本文件还是二进制文件? java对文件的操作 File类中的一些方法 流对象 流对象的简单概念 java标准库的流对象 1.字节流,(操作二进制数据的) 2.字符流 (操作文本数据的) 流对象最核心的四个…...
SpringCloud全家桶— — 【1】eureka、ribbon、nacos、feign、gateway
SpringCloud全家桶— — 组件搭建 1 Eureka 1.1 Eureka-server 创建eureka-server的SpringBoot项目 ①导入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId…...
【线程安全篇】
线程安全之原子性问题 x ,在字节码文件中对应多个指令,多个线程在运行多个指令时,就存在原子性、可见性问题 赋值 多线程场景下,一个指令如果包含多个字节码指令,那么就不再是原子操作。因为赋值的同时,…...
错误:EfficientDet网络出现“No boxes to NMS“并且mAP:0.0的解决方案
近日,在使用谷歌新推出来的一个网络EfficientDet进行目标检测训练自己的数据集的时候,出现了如下错误: 其中项目开源地址是:https://github.com/toandaominh1997/EfficientDet.Pytorch 上面截图中的1和2代表我的类别名称。读者可…...
python的opencv操作记录13——区域生长及分水岭算法
文章目录图像区域基本算法——形态学运算腐蚀与膨胀开运算与闭运算opencv中的形态学运算距离计算——distanceTransform函数连通域连通的定义计算连通域——connectedComponents连通域实验基于区域的分割区域生长算法自定义一个最简单区域生长算法实现区域分割一般区域分割open…...
一文看懂网上下单的手机流量卡为什么归属都是随机的!
最近很多网上下单的小伙伴们心中似乎都有一个疑问。那就是网上很多手机卡、流量卡都不能自选号码和归属地,就算能自选号码,归属地也是随机的而且很多都不会跟你说具体的城市,这是为什么呢?莫非其中有什么不可告人的秘密吗?小伙伴…...
python Pytest生成alluer测试报告的完整教程
1.下载allure包到本地,解压 网上很多资料,这边不提供了 2.配置环境变量 将上面解压后bin文件的路径复制,添加到环境变量Path下 3.验证环境变量配置是否功 在cmd中输入allure,回车 。查看allure是否成功: 4.pyc…...
4-spring篇
ApplicationContext refresh的流程 12个步骤 prepareRefresh 这一步创建和准备了Environment对象,并赋值给了ApplicationContext的成员变量 要理解Environment对象的作用 obtainFreshBeanFactory ApplicationContext 里面有一个成员变量,Beanfactory b…...
提升 Web 应用程序的性能:如何使用 JavaScript 编写缓存服务
缓存是一种重要的优化技术,用于加速数据访问和降低服务器负载。缓存存储经常访问的数据,以便在需要时可以快速检索。在本文中,我们将探索如何使用简单的数据结构在 JavaScript 中编写缓存服务。 编码缓存服务的第一步是定义将用于访问缓存的…...
供应商绩效管理指南:挑战、考核指标与管理工具
管理和优化供应商绩效既关键又具有挑战性。要知道价格并不是一切,如果你的供应商在商定的价格范围内向你开具发票,但服务达不到标准或货物不合格,你也无法达到节约成本的目标。 供应商绩效管理可以深入了解供应商可能带来的风险,…...
干货文稿|详解深度半监督学习
分享嘉宾 | 范越文稿整理 | William嘉宾介绍Introduction to Semi-Supervised Learning传统机器学习中的主流学习方法分为监督学习,无监督学习和半监督学习。这里存在一个是问题是为什么需要做半监督学习?首先是希望减少标注成本,因为目前可以…...
信箱|邮箱系统
技术:Java、JSP等摘要:在经济全球化和信息技术飞速发展的今天,通过邮件收发进行信息传递已经成为主流。目前,基于B/S(Browser/Server)模式的MIS(Management information system)日益…...
JS数组拓展
1、Array.from Array.from 方法用于将两类对象转为真正的数组: 类似数组的对象,所谓类似数组的对象,本质特征只有一点,即必须有length属性。 因此,任何有length属性的对象,都可以通过Array.from方法转为数组 和 可遍历…...
一道很考验数据结构与算法的功底的笔试题:用JAVA设计一个缓存结构
我在上周的笔试中遇到了这样一道题目,觉得有难度而且很考验数据结构与算法的功底,因此Mark一下。 需求说明 设计并实现一个缓存数据结构: 该数据结构具有以下功能: get(key) 如果指定的key存在于缓存中,则返回与该键关联的值&am…...
(10)C#传智:命名空间、String/StringBuilder、指针、继承New(第10天)
内容开始多了,慢品慢尝才有滋味。 一、命名空间namespace 用于解决类重名问题,可以看作类的文件夹. 若代码与被使用的类,与当前的namespace相同,则不需要using. 若namespace不同时,调用的方法:…...
基于Jetson Tx2 Nx的Qt、树莓派等ARM64架构的Ptorch及torchvision的安装
前提 已经安装好了python、pip及最基本的依赖库 若未安装好点击python及pip安装请参考这篇博文 https://blog.csdn.net/m0_51683386/article/details/129320492?spm1001.2014.3001.5502 特别提醒 一定要先根据自己板子情况,找好python、torch、torchvision的安…...
MySQL存储引擎详解及对比和选择
什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善…...
【推拉框-手风琴】vue3实现手风琴效果的组件
简言 在工作时有时会用到竖形手风琴效果的组件。 在此记录下实现代码和实现思路。 手风琴实现 结构搭建 搭建结构主要实现盒子间的排列效果。 用flex布局或者其他布局方式将内容在一行排列把每一项的内容和项头用盒子包裹, 内容就是这一项要展示的内容…...
滑动窗口最大值:单调队列
239. 滑动窗口最大值 难度困难2154收藏分享切换为英文接收动态反馈 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例…...
wordpress 数据库连接文件/郑州高端网站制作
flutter 运行别人项目 包无法导入报错:Target of URI doesnt exist package:flutter/material.dart 解决方法参考文章: (1)flutter 运行别人项目 包无法导入报错:Target of URI doesnt exist package:flutter/materia…...
自己做的网站只能打开一个链接/公司建设网站哪家好
近几年,智能穿戴、运动健康领域的发展如火如荼、方心未艾,各路厂商都在倾力投入,如今已经成为智能手机行业顶级存在的华为也不例外,并且取得了不俗战绩。8月10日,华为消费者业务智能穿戴与运动健康产品线总裁张炜接受媒…...
万网域名注册网站/怎么自己弄一个网站
1、$(document).ready(function(){})dom加载完成后触发window.onload只能注册一个方法页面所有内容加载完成后触发(图片,css,js都加缩写$(function(){})2、jQuery对象(包装集) dom对象var div document.getElementById("id") dom对…...
wordpress主题还原/seo发包软件
标星★公众号,第一时间获取最新研究作者:Rocky Kev编译:公众号编辑部近期原创文章:♥ 基于无监督学习的期权定价异常检测(代码数据)♥ 5种机器学习算法在预测股价的应用(代码数据)♥ 深入研读:利用Twitter情绪去预测股…...
网站页面建设规划文案/2021谷歌搜索入口
如果是评估版本,则需要先把评估版本升级为正式版本,才能正确的使用。 1.管理员模式运行cmd,输入命令:DISM /online /Get-CurrentEdition,得到结果: 部署映像服务和管理工具 版本: 10.0.14393.0 映像版本: 10.0.14393.0 当前版本为…...
为什么要建设学校网站/建材企业网站推广方案
模拟实现C智能指针shared_ptr和weak_ptr 仿写C的shared_ptr和weak_ptr 当强智能指针shared_ptr的引用计数为0时,析构资源 当弱智能指针weak_ptr的引用计数为0时,析构引用计数对象 #include<iostream> #include<new> #include<stdio.h&g…...