vector中存放自定義類的前提是:
自定義的類必須有預設建構函式。因為vector
會呼叫預設建構函式來初始化元素的物件。
那必須要明確:編譯器什麼時候隱式宣告預設建構函式?
有兩個條件:
· 該類沒有顯式宣告任何建構函式。--
既然你都定義了,系統就不給你生成了。
· 資料成員中沒有const
和reference。--
因為要初始化。
滿足則隱式生成預設建構函式。這裡強調「任何」
,是指即使使用者自定義了複製建構函式或乙個需要多個引數的建構函式,預設建構函式也不會被隱式宣告了。在定義乙個類時要保證有預設的建構函式。
沒有預設建構函式,系統會報錯:
#include#includeusing namespace std;
class myint
void print()
private:
int m_li;
int m_ri;
};int main()
return 0;
}
報錯資訊:error c2512:
「myint」:
沒有合適的預設建構函式可用。
分析:myint(int a ,int b):m_li(a),m_ri(b) 該類定義了建構函式,編譯器就不會定義預設建構函式,所以,就會報錯。
正確的做法:
class myint
myint():m_li(0),m_ri(0)
{}void print()
private:
int m_li;
int m_ri;
};int main()
return 0;
}
Object C中對自定義類實現協議
如果嘗試使用自定義類 例如,人類 person類 位址簿類 mybook類 分數類 fraction類 中的copy方法,如 cpp view plain copy mybook mybook mutablecopy person person copy 等類似的操作,將會收到一條異常出錯的訊息,它...
自定義乙個vector向量類
c 標準模板庫stl給出了vector,list,deque,stack,set,map等模板類,平時我們直接使用居多,對於類內部怎麼實現不在意。現在以向量類vector為例,簡單自定義 其uml vetor 陣列名ele t 陣列目前大小size int 陣列容量cap int vector 用指...
C 對存放物件的Vector容器按自定義字段排序
此處定義結構體或者類都一樣,都可以借助演算法庫,自己定義排序規則,然後使用sort方法,靈活變通 student.h ifndef student h define student h endif class student student.cpp include include student.h...