1. 程式人生 > >C++實踐參考——長方柱類

C++實踐參考——長方柱類

【專案 - 長方柱類】
  編寫基於物件的程式,求3個長方柱(Bulk)的體積。資料成員包括長(length)、寬(width)、高(heigth)、體積,要求設計成員函式實現下面的功能:
  (1)由鍵盤輸入3個長方柱的長、寬、高;
  (2)計算長方柱的體積(volume)和表面積(areas);
  (3)輸出這3個長方柱的體積和表面積;


[參考解答]

寫出的程式結構應該如下:

class Bulk
{//定義需要的成員函式
 //定義資料成員
};
//此處實現各成員函式
int 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的價值。這種解決方案的程式請讀者自行給出。