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 有參建構函式,引數為陣列的長度和...