這些函式包括:預設建構函式,複製建構函式,賦值建構函式,以及析構函式。這些函式都屬於public部分。
但是在有些情況下,賦值建構函式時沒有意義的,此時編譯器就會拒絕構造,舉乙個例子:
template class test
void print(){cout<
此時,如果你定義了3個test類的物件t1,t2,t3。testt3(t2);是合法的,而t2 = t1不合法了,因為:對const物件,只能初始化,不能賦值;在c++中,你不能改變引用的指向,所以如果存在賦值操作,就會幹這樣的事情:讓t2中的指向某乙個string的引用t2.name去指向另外乙個string,這是不可以的,所以編譯器會拒絕構造賦值建構函式。還有一種情況,就是如果基類的賦值建構函式為private,那麼編譯器也不會為派生類構造乙個賦值建構函式,因為通常情況下,我們總是希望派生類呼叫基類的賦值建構函式來對基類的資料成員進行賦值,而此時基類的賦值建構函式卻無法被繼承。
總之,如果你沒有定義建構函式,複製建構函式,賦值建構函式,析構函式,編譯器幫你定義,並把這些函式是為public。但是,如果某些資料成員無法進行賦值,那麼就不會定義賦值建構函式。
條款5 了解C 默默編寫並呼叫哪些函式
1.empty class 在c 處理過後就不再是乙個empty class.編譯器會為它宣告乙個copy 建構函式,乙個copy assignment操作符,乙個析構函式。此外你如果你沒有宣告任何建構函式,編譯器也會為你宣告乙個default建構函式。所有這些函式都是public且inline。所...
條款5 了解C 默默編寫並呼叫了哪些函式
編寫的每個類幾乎都有乙個或多個建構函式 乙個析構函式和乙個賦值運算子。這些是編寫乙個類所必需的一些函式,控制著類的基本操作,如產生物件並初始化,以及從系統中排除舊物件並對其進行恰當的清理工作,還有賦予物件新值。在這些函式中出錯帶來很大的負面影響,所以正確地寫好這些函式是十分重要的。這些函式構成了類的...
條款05 了解C 默默編寫並呼叫哪些函式
條款05 了解c 默默編寫並呼叫哪些函式 編譯器可以暗自為class建立default建構函式,copy建構函式,copy assignment操作符,以及析構函式 唯有當這些函式被呼叫,它們才會被編譯器建立出來 include include using std cout using std en...