1. 程式人生 > >C++程式設計-第5周 用建構函式初始化

C++程式設計-第5周 用建構函式初始化

看完書再做發現很簡單,只是自己一開始就產生了畏懼心理。——一位正在進步的同學這樣總結

這句話讓我很有感觸。這就是成長,這句話是留給有心人自己說出來的。——迂者感到很欣慰

【專案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個學生中成績最高者,並返回值其學號。