近日讀林銳的《高質(zhì)量C++編程》,作如下學(xué)習(xí)筆記。
(一)每個(gè)類只有一個(gè)析構(gòu)函數(shù)和賦值函數(shù),卻可以有多個(gè)構(gòu)造函數(shù)。
(二)C++編譯器會(huì)為每個(gè)類添加一個(gè)無參構(gòu)造函數(shù),析構(gòu)函數(shù),賦值函數(shù),拷貝構(gòu)造函數(shù)。
(三)缺省的拷貝函數(shù),和賦值函數(shù)采用位拷貝的方式,而不是值拷貝。類中含有指針變量時(shí)容易出錯(cuò)。
(四)構(gòu)造函數(shù)的初始化表。必須在派生類的初始化表中調(diào)用基類的構(gòu)造函數(shù),類中const常量也必須在類的初始化列表賦值,類成員的初始化可以在初始化表或者函數(shù)體內(nèi)賦值的方式,這兩種方式的效率不完全相同。
(五)構(gòu)造從類的最根出開始,先調(diào)用基類的構(gòu)造函數(shù),然后調(diào)用成員對象的構(gòu)造函數(shù)。析構(gòu)的順序與之相反。成員變量的初始化順序又定義的順序決定,而不是在初始化列表的順序決定的。
(六)拷貝構(gòu)造函數(shù)在對象創(chuàng)建時(shí)調(diào)用,賦值函數(shù)只能被已經(jīng)存在的對象條用。 賦值函數(shù)中必須檢查是否自賦值。注意不要把
if(this == &other)
寫成 (*this == other)
自己不想寫這兩個(gè)函數(shù),又不讓別人調(diào)用,可以把它們聲明為private。
(七)編寫派生類的賦值函數(shù),不要忘記對基類的成員重新賦值。Base::Operate= (other)