天天看點

《C++語言基礎》實踐項目——深複制、友元、模闆

【項目1-深複制體驗】

(1)閱讀下面的程式,補足未完成的注釋

(2)将注釋(a)所在的那一行去掉,會出現什麼現象?為什麼?為什麼a資料成員所占用的存儲空間要在aa長度基礎上加1?若指針a不是指向字元(即不作為字元串的位址),是否有必要加1?

(3)為類a增加複制構造函數,用下面的main函數測試

【項目2-我的數組類】

下面的程式,因為存在指針類型的資料成員,需要能完成深複制的構造函數。請補充完整構造函數和析構函數(其他不必動)。其中,構造函數要完成下面三個任務:

(1)為各成員函數指派,按照深複制原則,其中arrayaddr應該是為儲存資料新配置設定的連續空間的首位址;

(2)myarray(int *a, int n)中,要将a指向的數組中的數值,逐個地複制到新配置設定的arrayaddr指向的空間中;

(3)getmax( )函數采取的政策是直接傳回max(是以,計算max的工作,由構造函數完成)

【項目3-人數不定的工資類】

設計一個工資類(salary),其中的資料成員包括職勞工數(number,人數不定)和number個職工的工資salary,要求輸入職工工資并逐個輸出。

提示:用固定大小的數組存儲number個職工的工資,可能造成空間的浪費,也可能會由于空間不夠而不能處理職勞工數過多的應用。将salary聲明為指針類型的成員,通過動态配置設定空間,配置設定正好大小的空間存儲資料。

【項目4-成員函數、友元函數和一般函數有差別】

(1)閱讀下面的程式,體會注釋中的說明。

(2)模仿上面的示例,完成求點類中距離的任務。你需要實作求距離函數的三種版本:分别利用成員函數、友元函數和一般函數求兩點間距離的函數,并設計main()函數完成測試。

提示:此項目和例子的差別在于“距離是一個點和另外一個點的距離”,不同版本在參數上有展現。三個版本建議分開測試,也可以如示例,放在一個程式中完成。

下面是點類的部分代碼。

【項目5-友元類】

定義下面兩個類的成員函數(為體驗友元類,實際上本例并不一定是一個好的設計,将兩個類的合并為一個datetime,日期、時間都處理更好)

【項目6-複數模闆類】

    閱讀教材例10.1。該例實作了一個複數類,但是美中不足的是,複數類的實部和虛部都固定隻能是double型的。可以通過模闆類的技術手段,設計complex,使實部和虛部的類型為定義對象時指定的實際類型。

    (1)要求類成員函數在類外定義。

    (2)在此基礎上,再實作減法、乘法和除法

    你可以使用的main()函數如下。

    (3)友元函數提供了一種非成員函數通路私有資料成員的途徑,模闆類使類中的資料成員的類型變得靈活,這兩種技術可以結合起來用。要求在前面方案的基礎上支援用友員函數實作的加法。用于測試的main()函數如下:

繼續閱讀