1樓:匿名使用者
此為類别範本,該建構函式使用了初始化列表,等價於
seqlist(int sz=defaultsize)
}對於const、引用型別成員在建構函式內對其初始化是不起作用的,必須在初始化列表中初始化。
2樓:篤俠
簡單地講,類别範本是以型別作為形式引數的類。用類别範本例項化一個物件時,首先用實參型別替代類别範本定義中的型別形參而形成一個具體的類(模板類),然後用這個具體的類建立物件。
比如這個程式:
seqlist是類别範本(type為型別形參名),其功能是實現元素型別為type的順序表。
當用seqlist例項化一個物件(比如 seqlisttest(15); )時,首先用實參型別(int)替代類别範本(seqlist)定義中的型別形參(type)而形成一個具體的類(模板類seqlist),這個類的建構函式可以看成:
seqlist(int sz=defaultsize):m_nmaxsize(sz),m_ncurrentsize(-1)
}所以,執行 seqlisttest(15); 建立test物件時,test物件的資料成員m_nmaxsize的值為15,m_ncurrentsize的值為-1,m_elements的值為新分配的能夠存放15個int型資料的記憶體塊的首位元組地址。
3樓:匿名使用者
大哥我菜鳥。。一點也不懂。。
在c++中物件成員必須在含有引數的建構函式中初始化,並且在初始化成員列表中?這句話有問題吧?
4樓:周生
看你的成員變數型別和繼承方式了,公有成員變數和公有繼承,直接賦值就行了。私有成員變數,繼承之後要在初始化列表中初始化
初始化表的必要性
1) 類中包含常量和引用型的成員變數。必須通過建構函式和初始化表顯式地對其進行初始化。
2) 在子類中顯式地構造其基類部分。
class a
a (int n) : m_n (n) {}private:
int m_n;
};class b
b (int n) : m_a (n) {}private:
a m_a;};
5樓:
不一定在有引數建構函式初始化,不一定要在列表中初始化。
希望能幫到你,**不清楚再問。
例如:#include
using namespace std;
class a
};int main()
6樓:楊星光
1建構函式可以沒有引數
2如果沒有引數,那麼在建構函式中如資料成員直接賦值
如:class student;}
7樓:匿名使用者
可以無參建構函式初始化,不一定要在成員列表中,這只是其中的一種方式
什麼是建構函式?建構函式可以過載嗎?為什麼
與類名稱具有一樣名稱的成員函式是建構函式。建構函式不能有返回值,甚至不能有return語句。說明一個有返回值的建構函式是錯誤的,取建構函式的地址也是錯誤的。如果一個類有建構函式,在程式中每個該類型別的物件在使用之前由此建構函式進行初始化 有關初始化的更多資訊參見本章後面的 用特殊成員函式進行初始化 ...
在JAVA中,什麼是過載的建構函式
mxh快樂 建構函式的過載 舉個例子 public student public student string name public student string name,string age 上面三個函式都是student類的建構函式。第一個是無參的,第二個有一個引數,第三個有兩個引數。這就是...
在c類中定義建構函式的目的是什麼
糖糖寳寳 建構函式通常用於在例項化物件時自動對內部資料成員初始化,設定初始值 分配記憶體空間等。而解構函式則用於刪除物件時做收尾工作,比如釋放申請的空間等。要建立一個物件,就得呼叫建構函式。要銷燬一個物件,就會被迫的呼叫解構函式。如果成員函式宣告稱static,不建立物件也能呼叫 靜態成員函式。 根...