C++_代碼重用3-私有繼承
阿新 • • 發佈:2019-02-23
min 權限 方法 接口 -a size 重新定義虛函數 保護 包含 使用using重新定義訪問權限
使用包含:易於理解,類聲明中包含表示被包含類的顯式命名對象,代碼可以通過名稱引用這些對象;
使用繼承:將使關系更抽象,且繼承會引起很多問題,尤其是從多個基類繼承時。
私有繼承所提供的特性確實比包含多。
通常,應使用包含來建立has-a關系;如果新類需要訪問原有類的保護成員,或需要重新定義虛函數,則應使用私有繼承。
保護繼承
保護繼承:基類的公有成員和保護成員都將成為派生類的保護成員。
私有繼承與保護繼承的區別,在第三代繼承中就體現出來了。使用私有繼承時,第三代類不能使用基類的接口;使用保護繼承時,基類的公有方法在第二代中將變成受保護的,因此第三代派生類可以使用它們。
使用using重新定義訪問權限
(在繼承提供了一種機制來對基類公有方法的訪問權限的控制,屬性的改變):使用保護派生或私有派生時,基類的公有成員將成為保護成員或私有成員。
假設要讓基類的方法在派生類中可用,可以有兩種方法:
1) 定義一個使用該基類方法的派生類方法:
2) 將函數調用包裝在另一個函數調用中:
在類聲明中使用using;
class Student:private std::string, private std::valarray<double>
{
…
public:
using std::valarray<double>::min;
using std::valarray<double>::max;
}
using聲明使得valarray類的min,max方法可用,就像是Student類的公有方法一樣;
而且註意使用using聲明時,只使用成員名,沒有圓括號,函數特征標,返回類型。
Using聲明只適用於繼承,而不適用與包含。
C++_代碼重用3-私有繼承