C++程式設計-第5周 用建構函式初始化
阿新 • • 發佈:2019-02-07
看完書再做發現很簡單,只是自己一開始就產生了畏懼心理。——一位正在進步的同學這樣總結
這句話讓我很有感觸。這就是成長,這句話是留給有心人自己說出來的。——迂者感到很欣慰
【專案1】設計三角形類,通過增加建構函式,使物件在定義時能夠進行初始化
#include<iostream> using namespace std; class Triangle {public: double perimeter(void);//計算三角形的周長 double area(void);//計算並返回三角形的面積 void showMessage(); private: double a,b,c; //三邊為私有成員資料 }; void Triangle:: showMessage() { cout<<”三角形的三邊長分別為:”<<a<<'\t'<<<<b<<<<'\t'<<<<c<<endl; cout<<"該三角形的周長為:"<< perimeter()<<'\t'<<"面積為:"<< area()<<endl<<endl; } void main(void) { Triangle Tri1; //定義三角形類的一個例項(物件),要求執行一個預設建構函式,三邊初值均為1 Tri1.showMessage(); Triangle Tri2(7,8,9); //定義三角形類的一個例項(物件) Tri2.showMessage(); }
特別要求:為全面體會建構函式的各種寫法,本任務要求提交多個版本的程式,體現出你已經掌握下列知識點(帶引數建構函式、預設建構函式、有預設引數的建構函式、引數初始化表,先將這些個概念看書瞭解了。):
(1)使用帶引數建構函式,即Triangle(double x, double y, double z),三邊長在呼叫時由實參直接給出;
(2)設計預設建構函式,即不指定引數時,預設各邊長為1;
(3)使用有預設引數的建構函式,不給定實參時,預設邊長為1;
(4)在建構函式中使用引數初始化表對資料成員初始化。
【專案1拓展(選做)】請自行設計一個矩形類,可以計算矩形的面積、周長、對角線,判斷是否是正方形。請用上類似的建構函式,自己設計main()函式,對設計的類進行測試。
【專案2】C++中提供了多種基本的資料型別。實際上,這些遠不能滿足我們的需求,如複數(第10章的例子大多是處理虛數的),再如分數。本任務將設計一個簡單的分數類,完成對分數的幾個運算。一則鞏固基於物件程式設計的方法,二則也為第10章做運算子過載等積累些感性認識。
專案要求:完成下面類的設計,並在main()函式中自行定義物件,呼叫各成員函式,完成基本的測試。
class CFraction {private: int nume; // 分子 int deno; // 分母 public: CFraction(int nu=0,int de=1); //建構函式,初始化用 void set(int nu=0,int de=1); //置值,改變值時用 void input(); //按照"nu/de"的格式,如"5/2"的形式輸入 void simplify(); //化簡(使分子分母沒有公因子) void amplify(int n); //放大n倍,如2/3放大5倍為10/3 void output(int style=0); //輸出:以8/6為例,style為0時,原樣輸出8/6; //style為1時,輸出化簡後形式4/3; //style為2時,輸出1(1/3)形式,表示一又三分之一; //style為3時,用小數形式輸出,如1.3333; //不給出引數和非1、2,認為是方式0 };
【項止2拓展1(選做)】上面output(int style=0)中的輸出方式style的型別最適合使用自定義的列舉類(見第7章)了,試著改造一下。
【專案2拓展2(思考)】這個思考題吊一下大家的胃口:設定義了兩個分數類的物件,如CFraction c1, c2。如果定義了int i,我們能用cin>>i>>j;在鍵盤上輸入i和j的值,是否期望用cin>>c1>>c2;輸入分數呢?同理,用cout<<c1<<c2;進行輸出,可以嗎?進一步,用c1+c2得到新的一個分數,用c1/c2實現兩個分數的除法,以及其他加、減、比較、求倒數等也是理所當然的。實際上,要自定義分數類,這些直觀的基本運算應該要實現,這叫運算子的過載。本任務中用amplify()給出了“放大”運算的一種實現方案,更多內容值得期待地。
【專案3】編寫基於物件的程式,求5個長方柱的體積和表面積。長方柱類Bulk的資料成員包括長(length)、寬(width)、高(heigth)等。另外:
(1)需要定義長方柱類,5個長方柱採用一個物件陣列表示;
(2)定義相應的建構函式以支援如下main()函式中的初始化,其中前3個直接給出引數初始化(未給出的引數預設為1.0),第4個物件b[3]用預設建構函式初始化;第5個長方柱定義時不初始化,而是由鍵盤輸入長、寬、高賦值;
(3)輸出這5個長方柱的體積和表面積;
int main() { Bulk b[5]={Bulk(2.3,4.5,6.7),Bulk(1.5,3.4),Bulk(10.5)}; b[4].get_value(); //下面分別輸出這5個長方柱的體積和表面積 }
【專案4】設計一個學生類Student,包括學號(num)和成績(score)。建立一個物件陣列,通過初始化,設定5個學生的資料,要求:
(1)用指標指向陣列首元素,輸出第1、3、5個學生的資訊;
(2)設計一個函式int max(Student *arr);,用指向物件的指標作函式引數,在max函式中找出5個學生中成績最高者,並返回值其學號。