讀書筆記-----C++中的代碼重用

實現C++代碼的重用,除了公有繼承外,還可以使用多重繼承,使用兩個或者多個基類派生出新的類。

在前面已經瞭解到,使用公有繼承時,類可以繼承接口,可能還有實現(基類的純虛函數提供接口但不提供實現,擁有純虛函數的基類可以稱爲ABC)。獲得接口的是is-a關係的組成部分。而使用組合,類可以獲得實現,但不能獲得接口。不繼承接口是has-a關係的組成部分。

當初始化列表中包含多個項目時,這些項目被初始化的順序爲它們被聲明的順序,而不是它們在初始化列表中的順序,例如 student(const  char * str, const double *pd, int n) : scores(pd, n), name(str) {},在這裏將首先初始化name,因爲name是先被聲明的。

利用包含、私有繼承和保護繼承可以實現has-a關係。

使用公有繼承,基類的公有方法將成爲派生類的公有方法,換句話說,派生類將繼承基類的接口,這也是is-a關係的一部分。使用私有繼承,基類的公有方法將稱爲派生類的私有方法,也就是派生類不繼承基類的接口,這種不完全繼承是has-a關係的一部分。使用私有繼承提供的特性與包含相同:獲得實現,但不獲得接口。

由於既可以使用包含,也可以使用私有繼承來簡歷has-a關係,大多數程序員傾向於使用包含,包含易於理解,不會像繼承那樣引起許多問題,包含還可以包括多個子類成員。但是私有繼承提供的特性比包含多,還有一種需要使用到私有繼承的地方是需要重新定義虛函數時,派生類可以重新定義虛函數,但是包含不能,通常,應使用包含來建立has-a關係,如果新類需要訪問原有類的保護成員,或需要重新定義虛函數,則應使用私有繼承。

多重繼承中的虛基類:正是因爲虛基類的引入,是多重繼承稱爲可能,虛基類使得從多個類(它們的基類相同)派生出的對象只繼承一個基類對象。

如果一個類從兩個不同的類那裏繼承了兩個同名的成員,則需要在派生類中使用類限定符來區分。虛基類的引入可能使編程變得更加複雜,爲了避免使用虛基類,我們應該避免使一個工程中出現兩個或者多個同名名稱。

在C++中,類模版能夠設計出通用類,模版類可以用作基類,也可以用作組建類,還可以用作其他模版的類型參數。

模版類聲明也可以有有源,模版的有源分3類:非模版友元、約束模版友元、非約束模版友元。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 

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