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