C++面向對象中的坑和細節

必須使用初始化列表的情況,訪問父類private變量時也需要
初始化列表中初始化順序和成員變量聲明順序一致,而不是和初始化列表中順序一致

C++中struct和class區別
1.成員類型上:class中默認是private,struct中默認是public;
2.繼承時:class是默認private,struct默認public
3.其他:class可以表示模板類型,struct不能;

靜態成員的特殊性:獨此一份,所有人共享
不能在類內部進行初始化
靜態數據成員不受private修飾作用
靜態成員函數無法調用類的非靜態數據成員
優點:不會在程序中其他全局名字衝突
隱藏信息

構造函數可被重載,析構函數不可以
派生類創建實例時先執行基類構造函數再執行派生類構造函數,析構函數相反。
不要對構造函數進行嵌套調用,否則會產生不利影響,首先,真正起作用的是第一個構造函數,其餘的只是構造出一個臨時變量而已

explicit關鍵字:防止隱式轉換,普通構造函數可以被隱式調用,用explicit可以防止出現這個情況。

虛析構函數的作用
爲了正確地進行多態行爲,如果一個基類指針p指向派生類對象,而基類的析構函數未聲明爲virtual,則delete對象時僅僅調用基類的析構函數而造成內存泄漏,所以只有一個類被作爲基類時,纔會把它的析構函數聲明爲virtual。

深拷貝和淺拷貝
詳細解釋
簡單的說,淺拷貝會導致不同實例中的成員指向同一塊內存,而析構時卻析構兩次,這樣就會出錯。深拷貝就是給各自的成員都分配到不同的內存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章