1. 程式人生 > >C++_代碼重用3-私有繼承

C++_代碼重用3-私有繼承

min 權限 方法 接口 -a size 重新定義虛函數 保護 包含

使用包含:易於理解,類聲明中包含表示被包含類的顯式命名對象,代碼可以通過名稱引用這些對象;

使用繼承:將使關系更抽象,且繼承會引起很多問題,尤其是從多個基類繼承時。

私有繼承所提供的特性確實比包含多。

通常,應使用包含來建立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-私有繼承