C++實踐參考——長方柱類
阿新 • • 發佈:2019-01-03
【專案 - 長方柱類】
編寫基於物件的程式,求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的價值。這種解決方案的程式請讀者自行給出。