帶參建構函式的類物件陣列初始化

2021-06-28 02:29:50 字數 685 閱讀 5235

今天同學問我個問題:有乙個帶參建構函式的類,如何初始化其物件陣列?仔細想了想,應該不難額,比如:

#include using namespace  std;  

class a

};int main()

; return 0;

}

但是問題來了,如果陣列長度太大怎麼辦?想了一下,目前所知道的有兩種比較好的辦法:

(1)使用stl容器vector來代替靜態陣列:

#include #include class a 

};int main()

但這裡每次push_back時除了呼叫a的建構函式外還會呼叫a的拷貝建構函式,而且在陣列大小動態增長的過程中,由於動態申請記憶體可能導致資料的搬移也會再次呼叫a的拷貝建構函式,這樣效率比較低下。

(2)利用operator new + 動態記憶體處理:

#include using namespace  std;  

class a

~a() };

int main()

不過,這裡要注意自行呼叫a的析構函式,而且這裡申請的記憶體雖然用於陣列,但operator new僅申請記憶體,並未存放陣列長度等資訊,不能由delete 的形式釋放。

類的初始化(建構函式)

1.類成員為const型別 2.類成員為引用型別 include using namespace std class a void print val private const inti intp int j int main int argc char argv 究其因 const物件或引用只能...

C 類 物件 建構函式 初始化列表

面向過程程式設計 關注是問題解決的過程步驟 事情是如何解決的 演算法。物件導向程式設計 關注的是誰能解決問題 類 需要什麼樣的資料 成員變數 具備什麼樣的技能 成員函式 才能解決問題。抽象 找出乙個能夠解決問題的 物件 觀察研究物件 找出解決所必須的資料 屬性 功能 成員函式 封裝 把抽象的結構,歸...

類建構函式初始化列表

表現形式有三種 當前類進行初始化,尤其是當成員變數是乙個const或者乙個引用型別 class demo 需要在初始化列表中呼叫外部類成員的初始化函式 include using namespace std classc1 classc2 intmain 最後列印的結果是 class 1 const...