C C 動態分配 類的模板與陣列類構建例項

2021-09-21 01:42:22 字數 2853 閱讀 8976

c++實驗**及學習筆記(八)

你好! 這是乙個高程實驗課的**記錄及學習筆記。我將記錄一些重要的知識點、易錯點。但是作為大學生,水平很低,敬請指點教導、優化**。

本次課我們學習了類的動態分配。類的動態分配與普通的malloc、free不同,取而代之的是new和delete。本質上非常相似,只是malloc、free不能呼叫構造與析構函式。所以建立物件陣列時,我們要使用new和delete操作。

「應用任意大小和型別」,則用到了我們新學習的概念:模板。類的模板非常實用,充分體現了c++泛型程式設計、多型性的優越性。

同時自己實現乙個動態陣列類,則是對陣列、運算子過載等知識的進一步鞏固。

話不多說,咱們打板就唱 打碼就上。

參考文章:精品*** c++模板詳解

模板是c++支援引數化多型的工具,使用模板可以使使用者為類或者函式宣告一種一般模式,使得類中的某些資料成員或者成員函式的引數、返回值取得任意型別。

使用模板的目的就是能夠讓程式設計師編寫與型別無關的**。它可以給出一種模板型別t,用於宣告成員變數、形參等等,呼叫時註明所需型別(如int)就可以建立類模板物件。十分方便。

給出具體例子,簡單明瞭:

1、類模板的格式為:

templateclass 類名

template

//模板形參

class a //模板類的宣告

;

2、類模板物件的建立:比如乙個模板類a,則使用類模板建立物件的方法為

a<

int> m

在類a後面跟上乙個<>尖括號並在裡面填上相應的型別,這樣的話類a中凡是用到模板形參的地方都會被int 所代替。當類模板有兩個模板形參時建立物件的方法為am;型別之間用逗號隔開。

3、在類模板外部定義成員函式的方法為:

template《模板形參列表》 函式返回型別 類名《模板形參名》::函式名(引數列表),

template

void a::

h()。

首先,我們要構思這個類的成員資料和函式,實現什麼功能,解決什麼問題。

記憶體管理:初始化指標

template 

class array

array

(int size)

for(

int i =

0; i < size; i++

)}

如果非建構函式,則需要先刪除記憶體。因為_data可能記憶體可能已被分配,不刪除就會造成記憶體洩漏。

void

create

(int size)

為什麼要重寫複製建構函式?

因為預設複製建構函式,執行的是淺複製,對指標name拷貝後會出現兩個指標指向同一記憶體的局面。

而深複製,則是重新分配乙個新的記憶體空間,避免記憶體洩漏。

array

(const array

&obj)

//拷貝建構函式

}

#include

#include

#include

using namespace std;

template

class array

array

(int size)

for(

int i =

0; i < size; i++)}

array

(int size,

const t* array)

strcpy_s

(this->arr,_size, array)

;//strcpy(this->arr,array);

}array

(const array

&obj)

//拷貝建構函式

} array

& operator=

(const array

&obj)

//賦值建構函式

}return

*this;}~

array()

} public:

void

resize

(int size)

//重新分配大小

咱一言也說不盡這知識點呀,祝列位闔家歡樂,福壽康寧! 感謝大家閱讀,鞠躬**!

動態分配類物件與靜態分配類物件

動態分配類物件 就是使用運算子new來建立乙個類的物件,在堆上分配記憶體。靜態分配類物件 就是a a,由編譯器建立類物件,在棧上分配記憶體。1 動態分配類物件 把類的建構函式和析構函式設為protected屬性。類物件不能訪問,但是派生類可以繼承,也可以訪問。同時,建立create和destroy兩...

類的動態分配記憶體與釋放

在對類進行例項化時也許會批量申請 例如,申請10個account例項,account buf new account 10 申請記憶體,並呼叫預設建構函式 for int i 0 i 10 i new buf i account ab i 呼叫用具有兩個引數的建構函式,在原來的記憶體上 上面的兩次呼...

動態分配陣列C 模板

通過動態分配的方法實現了動態陣列的建立,其中包括多種運算子過載。include define size 100 using namespace std template class array 有參建構函式,引數為陣列的長度 array int n length n 有參建構函式,引數為陣列的長度和...