例項化:是指建立乙個物件的過程
c++中類的例項化有兩種方式——在棧中例項化和在堆中例項化
在棧中例項化為靜態分配記憶體,不需要手動**,超出記憶體系統報錯。例如:student a或者student a[3],使用「.」操作符,宣告即呼叫了建構函式(已分配了記憶體);
在堆中例項化為動態分配記憶體,需要使用delete**。例如:student* a = new student()或者student* a = new student[3],使用「->」操作符,()相當於呼叫建構函式,如果存在預設的建構函式時,有時候會省略();
student是直接訪問乙個物件
student*是間接訪問乙個物件,因為通過了乙個指標作媒介。
然而什麼時候用哪一種方法呢?
1.申請物件數量不確定時
2 需要空間較大時,例如:
你可以定義乙個陣列 byte pbuff[4000*1024]; 用來存放檔案資料
這樣如果檔案很小就會浪費記憶體空間,檔案很大則檔案資料不能全部讀出。所以在讀檔案的時候需要根據檔案的size來開闢一塊記憶體
byte *pbuff = new byte[size]使這塊記憶體剛剛好可以存放檔案資料
像這種情況就需要new 了,不管你的物件或結構引數多麼龐大,你用指標,傳過去的就是4個位元組。如果用物件,引數 傳遞占用的資源就太大了。
3.需要用類實現多型性
這個主要是在用類的繼承特性的時使用
4.需要跨作用域的時候採用new的方法,只在乙個函式內使用的物件採用直接訪問的方法即可。
C 類的兩種例項化方法
直接上 include include include using namespace std class student student student int age,string name void student show int age,string name void student s...
C 類例項化方式
c 中,例項化方式一般有兩種 1,直接定義物件,這時成員變數需要通過 來訪問,如 a a 2,定義乙個類指標,這時需要用到new方法,如 a a new a。訪問類的成員函式或者說是成員變數需要通過 但是這個時候,當物件使用完成之後,需要使用delete a 把該指標刪除。怎樣選擇 二者的記憶體分配...
學習C 類的例項化 和方法的問題
using system using system.collections.generic using system.text 答案 a a b 這個嗎就是 基類物件引用子類的物件 結果應該是 a.fb.f a.gb.g 如果是你們書上的這種結果 應該把子類的 public virtual void...