第3周-任务4-设计立方柱类

简介: 【题目】(改自教材P262第6题)仿照你阅读过的程序,编写基于对象的程序,求3个长方柱的体积。数据成员包括长(length)、宽(width)、高(heigth)、体积,要求用成员函数实现下面的功能: (1)由键盘输入3个长方柱的长、宽、高; (2)计算长方柱的体积(volume)和表面积(areas); (3)输出这3个长方柱的体积和表面积; 【说明】这是第一个设计性质的程序,需
【题目】(改自教材P262第6题)仿照你阅读过的程序,编写基于对象的程序,求3个长方柱的体积。数据成员包括长(length)、宽(width)、高(heigth)、体积,要求用成员函数实现下面的功能:
(1)由键盘输入3个长方柱的长、宽、高;
(2)计算长方柱的体积(volume)和表面积(areas);
(3)输出这3个长方柱的体积和表面积;


【说明】这是第一个设计性质的程序,需要用面向对象的思想写出一个完整的程序来。

一切事物都可以是对象,本题中需要对涉及到的事物进行描述。从这点来看,本题直接就能看出要描述的就是长方柱!要建立一个长方柱类,在此基础上定义出3个长方柱对象来进行处理。

对象(类)具的属性和操作两部分。

属性对应数据成员,反映事物的特征,为描述长方柱的特征,在本题中,很明显地,长方柱的长、宽、高是必须的。另外,可以考虑将体积和表面积也作为属性(也可以不作为属性,而需要时直接用长方柱的长、宽、高去计算)。

操作对应的是一段代码,对应成员函数,用来使对象完成一定的功能。根据题意描述可以发现,输入数据、输出体积和表面积是两个必须的操作,计算体积、表面积可以考虑作为两个可选的操作,也可以将其功能合并到输出函数中即时计算并输出。

在阅读这一段文字时,请在头脑中形成class定义的映像,再下笔写类定义时就有清晰的思路了。

至于main()函数,能够定义对象并演示功能就可以了。


【解决方案1】这一个方案给出用最少的数据成员(3个)和成员函数(2个)的解决办法

#include <iostream>
using namespace std;
class Bulk
{
public:
	void get_value();
	void display();
private:
	float lengh;
	float width;
	float height;
};

void Bulk::get_value()
{ 
	cout<<"please input lengh, width,height:";
	cin>>lengh;
	cin>>width;
	cin>>height;
}

void Bulk::display()
{ 
	cout<<"The volume is: "<<lengh*width*height<<endl;
	cout<<"The surface area is: "<<2*(lengh*width+lengh*height+width*height)<<endl;
}

int main()
{
	Bulk b1,b2,b3;

	b1.get_value();
	cout<<"For bulk1: "<<endl;
	b1.display();

	b2.get_value();
	cout<<"For bulk2: "<<endl;
	b2.display();

	b3.get_value();
	cout<<"For bulk3: "<<endl;
	b3.display();
	return 0;
}

【解决方案2】相对方案1,将体积和表面积作为数据成员,并提供专门的成员函数求解(推荐用这种方案,每个函数的内聚性增强)

#include <iostream>
using namespace std;
class Bulk
{
public:
	void get_value();
	void display();
private:
	void get_volume();  //用于内部计算的,作为私有函数有利于信息隐藏
	void get_area();
	float lengh;
	float width;
	float height;
	float volume;
	float area;
};

void Bulk::get_value()
{ 
	cout<<"please input lengh, width,height:";
	cin>>lengh;
	cin>>width;
	cin>>height;
	get_volume();  //长宽高获得值以后即可以计算,也可以在display中输出前计算,但综合而言,此处更佳
	get_area();
}

void Bulk::get_volume()
{
	volume=lengh*width*height;
}

void Bulk::get_area()
{
	area=2*(lengh*width+lengh*height+width*height);
}

void Bulk::display()
{ 
	//get_volume()和get_area()也可以在此处调用,本例中计算工作在长宽高确定后立刻进行	
	cout<<"The volume is: "<<volume<<endl;
	cout<<"The surface area is: "<<area<<endl;
}

int main()
{
	Bulk b1,b2,b3;
	
	b1.get_value();
	cout<<"For bulk1: "<<endl;
	b1.display();
	
	b2.get_value();
	cout<<"For bulk2: "<<endl;
	b2.display();
	
	b3.get_value();
	cout<<"For bulk3: "<<endl;
	b3.display();
	return 0;
}
【解决方案3】相对方案2,将get_volume()和get_area()声明为public型。这时,这两个函数可以在main()函数中用形如b1.get_volume()和b1.get_area()的方式调用,将输入、计算、显示的流程体现在main()函数中。也可以采用如方案2中形式调用,但体现不了public的价值。

这种解决方案的程序请读者自行给出。


【总结】深刻理解“类和对象是对事物描述”是建立类的基础。基于此,自然地将事物描述下来,程序就出来了。至于程序的写法,可以形式多样。坚持实践,就能学会综合考虑,写出可读性强、高效、合理的程序。



<本文完>

目录
相关文章
|
6月前
|
Python
心得经验总结:期权定价的BS公式
心得经验总结:期权定价的BS公式
54 0
|
数据处理 Python
如何将逐小时数据处理为逐日数据
如何将逐小时数据处理为逐日数据
宜搭小技巧|自动计算日期时长,3个公式帮你搞定!
使用「时间函数」实现日期时长自动计算功能,让表单填写更轻松。
2025 0
宜搭小技巧|自动计算日期时长,3个公式帮你搞定!
|
人工智能 Cloud Native NoSQL
周一见!距离阿里巴巴开源开放周还有3天
面对快速变化的世界,开源领域涌现了哪些新技术和发展模式?开源社区建设又有哪些新进展和创新实践?下周 8月22日-24日,连续三天,精彩不止。锁定"阿里技术"视频号直播和开发者和开源爱好者一起探索开源领域最佳实践和新机遇,欢迎预约直播,精彩分享和海量周边抽奖福利。2022阿里巴巴开源开放周 ,敬请期待!
周一见!距离阿里巴巴开源开放周还有3天
|
算法 测试技术
h0103. 末日算法 (10 分)
h0103. 末日算法 (10 分)
238 0
第二天打卡-整数规划(1)
第二天打卡-整数规划(1)
125 0
第二天打卡-整数规划(1)
|
运维 搜索推荐 数据挖掘
用宜搭两周打造的数字工厂,让订单周期缩减三分之一
基于宜搭低代码平台开放的能力,富得利上线了一套数字工厂。这个数字工厂帮助他们将生产周期从60天缩短至40天,直接提升了富得利对于国际客户的交付能力、履约能力,企业竞争实力得到增强。
10284 0
用宜搭两周打造的数字工厂,让订单周期缩减三分之一
2020年Q1美国独角兽新增数同比降30%,总估值不及上季度
CB Insights最新数据显示,在2020年第一季度,美国新增12家独角兽公司,相比去年同期减少29.4%,相比上个季度减少25%。
2020年Q1美国独角兽新增数同比降30%,总估值不及上季度