面向对象程序设计|类和对象
创始人
2025-05-28 03:14:38

通过几道OJ题目,掌握一些类与对象的基础知识……

问题一:学生类定义

题目描述:

面向对象程序设计的中心就是把客观事物抽象为程序世界里一段段代码,校园里的主体是学生,泛泛的学生包含很多属性,比如姓名、学号、所在学院、专业、性别、住址、联系电话。。。。。。等等,有这些属性,需要操纵它们的动作,比如读取姓名、设置姓名、读取学号、设置学号。。。。。。等等,这就是我们课堂说的属性和方法,对于属性和方法,我们又有访问控制方式限制,标示为public、private、protected等,根据以上的信息,请给出一个完整的学生类定义:Student,并测试输出n个该类对象的各项属性值。

输入要求:

第一行表示要输入n个对象

后续各行输入不同对象的各属性值,每个对象一行。

输出要求:

输出不同对象的各自属性

每个对象占一行

输入样例:

2
WangHai 2014150112 CSSE ComputerScience male South215 13760222222
LiBin 2013151292 CSSE SoftwareEngineering female South318 13677777777

输出样例:

WangHai 2014150112 CSSE ComputerScience male South215 13760222222
LiBin 2013151292 CSSE SoftwareEngineering female South318 13677777777
#include
#include
#include
#include 
#include
#include
using namespace std;class Student {
public:void setName(string name0){name = name0;}void setId(string id0){id = id0;}void setDepartment(string department0){department = department0;}void setMajor(string major0){major = major0;}void setSex(string sex0){sex = sex0;}void setAddress(string address0){address = address0;}void setPhone(string phone0){phone = phone0;}string getName(){return name;}string getId(){return id;}string getDepartment(){return department;}string getMajor(){return major;}string getSex(){return sex;}string getAddress(){return address;}string getPhone(){return phone;}private://由于private,在类外部无法访问,便设定setXXXX函数对其赋值string name, id, department, major, sex, address, phone;
};int main() {int t;cin >> t;while (t--){Student s;string name, id, department, major, sex, address, phone;cin >> name >> id >> department >> major >> sex >> address >> phone;s.setName(name);//对类内部private属性进行赋值s.setId(id);s.setDepartment(department);s.setMajor(major);s.setSex(sex);s.setAddress(address);s.setPhone(phone);cout << s.getName() << " " << s.getId() << " " << s.getDepartment() << " " << s.getMajor() << " " << s.getSex() << " " << s.getAddress() << " " << s.getPhone() << endl;//通过设定get函数对private属性进行调用}
}

一道十分简单基础的题目,有利于传参好习惯的养成。

问题二:音像制品

题目描述:

某商店出租音像制品,制品信息包括:类型、名称、租金单价、状态。

其中类型用单个数字表示,对应关系为:1-黑胶片(BF),2-CD,3-VCD,4-DVD

名称是字符串,存储制品的名称信息

租金单价表示每天租金价格

状态用单个数字表示,0是未出租(not rented),1是已出租(rented)

商店提供业务操作包括

1. 初始化(可使用构造函数或set方法),从键盘输入音像制品的信息,并设置到对象中

2. 查询Print,输出音像制品的信息

3. 计算租金Fee,参数是租借的天数,输出租金总价,如果未出租则提示,具体输出信息看示范

请定义音像制品类,并创建相应的对象来完成操作

题目涉及的数值均用整数处理

输入要求:

第一行输入n表示有n个音像制品

每个音像制品对应两行输入

一行输入一个音像制品的多个参数,具体为:类型、名称、租金单价、状态

一行输入操作命令,如果输入为0表示查询操作,非0则表示查询并且计算租金费用,租用天数就是这个非0值

依次输入2n行

输出要求:

根据每个音像制品的操作命令,调用相应的操作,然后输出相关结果

输出样式看示范。

输入样例:

4
1 AAA 43 1
0
2 BBB 19 0
3
3 CCC 27 1
5
4 DDD 32 1
7

输出样例:

BF[AAA]rented
CD[BBB]not rented
No rental
VCD[CCC]rented
Rental: 135
DVD[DDD]rented
Rental: 224
#include
#include
#include
#include 
#include
#include
using namespace std;class Video {
public:void setType(int type0)//根据输入的数字找到对应的类型{if (type0 == 1){type = "黑胶片";}else if (type0 == 2){type = "CD";}else if (type0 == 3){type = "VCD";}else if (type0 == 4){type = "DVD";}}void setName(string name0){name = name0;}void setCent(int cent0){cent = cent0;}void setCondition(int con0)//con与condition分开,利于对是否出租进行判断{con = con0;if (con0 == 0){condition = "未出租";}else if (con == 1){condition = "已出租";}}string getType()//设置get函数,调用类里的private属性{return type;}string getName(){return name;}string getCondition(){return condition;}int getCon(){return con;}int getCent(){return cent;}
private:string type, name, condition;int cent, con;
};int main() {int t;cin >> t;while (t--){Video v;string name0;int cent0, con0, type0;cin >> type0 >> name0 >> cent0 >> con0;v.setType(type0);v.setName(name0);v.setCent(cent0);v.setCondition(con0);int operate;cin >> operate;if (operate == 0)//直接查询{cout << v.getType() << "[" << v.getName() << "]" << v.getCondition() << endl;}else if (operate > 0){cout << v.getType() << "[" << v.getName() << "]" << v.getCondition() << endl;if (v.getCon() == 0)//若出租则计算租金,不出租则未产生租金{cout << "未产生租金" << endl;}else{cout << "当前租金为" << operate * v.getCent() << endl;}}}return 0;
}

根据指定要求传参数,调用函数即可。

问题三:身体评估

题目描述:

评估成年人身体健康有多个指标,包括BMI、体脂率BFR等

设计一个身体健康类,包含私有成员:姓名、身高(米)、体重(公斤),腰围(厘米),实现两个公有方法如下:

BMI方法,返回BMI数值(整数),计算公式BMI= 体重 / 身高的平方

体脂率方法,返回体脂率数值(浮点数),计算过程如下:

1)参数a=腰围(cm)×0.74

2)参数b=体重(kg)×0.082+34.89

3)体脂肪重量(kg)=a-b

4)体脂率 = 体脂肪重量÷体重

其它方法根据需要自行定义

输入要求:

第一行输入t表示有t个测试实例

第二行起,每行输入四个参数:姓名、身高、体重,腰围

依次输入t行

输出要求:

输出t行,每行输入一个实例的BMI和体脂率,小数数值精确到小数点后2位,用空格隔开

输入样例:

2
David 1.85 78.5 85.2
Sara 1.55 67.6 77.3

输出样例:

David's BMI: 23--BFR: 0.28
Sara's BMI: 28--BFR: 0.25
#include
#include
#include
#include 
#include
#include
using namespace std;class Health {
public:void setName(string name0){name = name0;}void setBMI(float h0, float w0)//通过函数计算BMI指数{BMI = w0 / (h0 * h0);}void setBFR(float w0, float wl0)//通过函数计算BFR指数{BFR = (wl0 * 0.74 - w0 * 0.082 - 34.89) / w0;}string getName() {return name;}float getBMI() {return BMI;}float getBFR() {return BFR;}private:string name;float height, weight, wline, BMI, BFR;
};int main() {int t;cin >> t;while (t--){Health s;string name;float height, weight, wline;cin >> name >> height >> weight >> wline;s.setName(name);s.setBMI(height, weight);s.setBFR(weight, wline);cout << s.getName() << "'s BMI: ";cout << fixed << setprecision(0) << s.getBMI() << "--BFR: ";//fixed<

问题四:点和圆

题目描述:

设计一个点类Point,包含属性:x坐标和y坐标,方法:设定坐标(SetPoint),获取x坐标(GetX),获取y坐标(GetY)

设计一个圆类Circle,包含属性:圆心坐标x和y、半径r;方法包括:

1. 设定圆心(SetCenter),设置圆心x坐标和y坐标

2. 设定半径(SetRadius),设置半径长度

3. 计算面积(getArea),计算公式:面积=3.14*r*r

4. 计算周长(getLength),计算公式:周长=2*3.14*r

5. 包含(Contain),判断一个圆是否包含一个点,计算圆心到这个点的距离,然后和半径做比较,大于则不包含,小于等于则包含

注意:提交代码时必须用注释划分出三个区域:类定义、类实现、主函数,如下

//-----类定义------

class XXX

{ // 写类定义代码

};

//----类实现------

void XXX::Process()

{ // 写类定义代码

};

//-----主函数-----

int main()

{

//自定义一些变量

//创建一个圆对象和一个点对象

//输入圆对象和点对象的属性数值,并做初始化

//输出圆的面积和圆的周长

//输出圆是否包含点,包含则输出yes,否则输出no

return 0;

}

输入要求:

第一行输入圆的三个参数:圆心的x和y坐标,半径

第二行输入点的两个参数:x和y坐标

输出要求:

第一行输出圆的面积和周长,结果之间用空格隔开,输出精度到小数点后2位

第二行输出圆是否包含点,包含则输出yes,否则输出no

输入样例:

1 1 1
2 2

输出样例:

3.14 6.28
no
#include
#include
#include
#include 
#include
#include
using namespace std;class Point {
public:void setPoint(float ix, float iy){x = ix;y = iy;}float getX(){return x;}float getY(){return y;}private:float x, y;
};class Circle {
public:void setCenter(float jx, float jy){x = jx;y = jy;}void setRadius(float jr){r = jr;}float getX(){return x;}float getY(){return y;}float getRadius(){return r;}float getArea(){return 3.14 * r * r;}float getLength(){return 2 * 3.14 * r;}
private:float x, y, r;
};int main() {Point p;Circle c;float x0, y0, r0, x1, y1;cin >> x0 >> y0 >> r0 >> x1 >> y1;c.setCenter(x0, y0);c.setRadius(r0);p.setPoint(x1, y1);cout << fixed << setprecision(2) << c.getArea() << " " << c.getLength() << endl;//固定精度输出面积与周长,面积与周长都是定义在类中的属性if ((c.getX() - p.getX()) * (c.getX() - p.getX()) + (c.getY() - p.getY()) * (c.getY() - p.getY()) > c.getRadius())//点与圆位置关系的判定{cout << "no" << endl;}else{cout << "yes" << endl;}
}

问题五:存折类定义

题目描述:

定义一个存折类CAccount,存折类具有帐号(account, long)、姓名(name,char[10])、余额(balance,float)等数据成员,可以实现存款(deposit,操作成功提示“saving ok!”)、取款(withdraw,操作成功提示“withdraw ok!”)和查询余额(check)的操作,取款金额必须在余额范围内,否则提示“sorry! over limit!”。

编写主函数,建立这个类的对象并测试,输入账号、姓名、余额后,按照查询余额、存款、查询余额、取款、查询余额的顺序调用类方法并输出。

输入要求:

第一个存折的账号、姓名、余额

存款金额

取款金额

第二个存折的账号、姓名、余额

存款金额

取款金额

输出要求:

第一个存折的账户余额

存款操作结果

账户余额

取款操作结果

账户余额

第二个存折的账户余额

存款操作结果

账户余额

取款操作结果

账户余额

输入样例:

9111 Tom 1000
500
1000
92220 John 500
500
1500

输出样例:

Tom's balance is 1000
saving ok!
Tom's balance is 1500
withdraw ok!
Tom's balance is 500
John's balance is 500
saving ok!
John's balance is 1000
sorry! over limit!
John's balance is 1000
#include
#include
#include
#include 
#include
#include
using namespace std;class CAccount {
public:void Deposit(float d0)//存款操作对应的函数{balance += d0;cout << "saving ok!" << endl;}void Withdraw(float w0)//取款操作对对应的函数{if (w0 <= balance){balance -= w0;cout << "withdraw ok!" << endl;}else{cout << "sorry! over limit!" << endl;}}void Check(){cout << name << "'s balance is " << balance << endl;}void setAccount(long acnt){account = acnt;}void setName(string name0){name = name0;}void setBalance(float b0){balance = b0;}private:long account;string name;float balance;
};int main() {for (int i = 0; i < 2; i++){CAccount s;long ac0;string n0;float b0, d0, w0;cin >> ac0 >> n0 >> b0;s.setAccount(ac0);//一个不断设置指令,调用指令的过程s.setName(n0);s.setBalance(b0);s.Check();cin >> d0;s.Deposit(d0);s.Check();cin >> w0;s.Withdraw(w0);s.Check();}
}

根据要求,完成类与对象的编写,通过指令,运行代码。

相关内容

热门资讯

redis cluster 集... master-slave -sentinel集群master 写单点,无法扩容。 ...
Java发起同步和异步HTTP... 同步与异步概念辨析 同步(synchronous)和异步(...
Kubernetes安装与集群... 一、环境准备 1、机器环境前置条件 当前演示准备3台虚拟机环境,或者是3台阿里云服务器...
simscape仿真总结2-机... 最近用simscape进行机器人的仿真,记录和总结一下学习心得和踩过的坑。 参照B站...
Redis(一):数据结构-底... 前言 从本文开始,我将分享一下近期自学 Redis 的学习笔记,其中大部...
flask教程5:abort函... 文章目录一、abort()函数的使用1.传递状态码信息2.传递响应体消息二、自定义错误处理 app....
【玩转Jetson TX2 N... 1 VMware14 Workstation Pro安装 如果没有Ubuntu系统电脑,...
2023还有人不知道kuber... 文章目录Kubernetes(K8s)一、Openstack&VM1、**认识虚拟化****1.1*...
NOI2019模拟赛 T1牛油... 题目描述 牛油果是一种神秘的水果,其具有一个坚固程度x≥0x\geq 0x≥0...
嵌入式软件开发之Linux下C... 目录 前沿 Hello World! 编写代码 编译代码 GCC编译器  gcc 命...
云原生|Rancher与Ope... 目录一、Rancher(一)介绍(二)优点&...
如何突破卫星影像建模难点?重建... 日前,由重建大师生成的首个“珞珈三号01星”卫星影像三维模型一经发出,引...
L1-085 试试手气 L1... 我们知道一个骰子有 6 个面,分别刻了 1 到 6 个点。下面给你 6 个骰子的初始状...
SpringSecurity客... 概述 FilterChainProxy是spring-security的入口,包含默认...
数据结构--二叉树 目录1.树概念及结构1.1数的概念1.2数的表示2.二叉树概念及结构2.1二叉树的概念2.2数据结构...
Qt之QUrl和QUrlQue... QUrlQUrl 类提供了一个方便的接口使用 URLs。最常见的使用QUrl 的方式是通过构造函数来...
函数指针二三事 1 什么是函数指针? ​ 函数指针,顾名思义,它是一个指向...
[ 红队知识库 ] Windo... 🍬 博主介绍 👨‍🎓 博主介绍:大家好...
【PowerBI】PowerB... 目的: 陈述PowerBI连接Mysql数据库的坑。 方法1:直接使用【...
BI数据可视化|可自动刷新的可... BI数据可视化大屏和其他的BI报表一样,都是可用于日常的决策中,因此除了...
Linux 练习十二 (Lin... 文章目录1 计算机网络基础知识1.1 OSI参考模型和TCP/IP参考模型1.2 TCP 协议1.2...
SQL语言基础教学 | Mys... SQL语言基础教学SQL(Structured Query Languageÿ...
pandas数据分析(三) 书接pandas数据分析(二) 文章目录DataFrame数据处理与分...
DC-DC升压模块隔离高压稳压... 特点● 效率高达 80%● 2*2英寸标准封装● 单双电压输出● 价格低● 大于600V高压,稳压输...
Java【多线程基础2】 Th... 文章目录前言一、Thread类1, 构造方法2, 常用成员属性3, 常用成员方法3.1, start...
TDK| 电源——反激变压器设... 电源参数根据功率、输入输出的情况,我们选择反激电源拓扑。反激式变压器的优点有:1、 电...
Python:判断语句 目录一、布尔类型1.1定义1.2获取二、逻辑运算符2.1and运算符2.2or运算符2.2not运算...
协程池加disruptor加e... 先说一下disrutor和协程的实现。然后介绍服务器具体分析,以及迭代过程,项目困难,学到东西,压测...
selenium(2)----... 操作界面上的元素: 先选中元素再进行调用下面的方法 1)click(),点击对象 2)...
第九章:C语言数据结构与算法初... 系列文章目录 文章目录系列文章目录前言一、堆的定义二、堆的实现三、堆的接口函数1、初始化2、销毁3...