- 分層:使某個類的對象成爲另一個類的數據成員,從而實現將一個類構築在另一個類之上,這一過程稱爲“分層”。
- 公有繼承的含義是“是一個”。對應地,分層的含義是“有一個”或“用…來實現”。
- Person對象“有一個”名字,地址,電話號碼和傳真號碼。
- Set模板要求用來表示任意對象的集合,並且集合中沒有重複元素。因爲list可以包含重複對象,所以,用公有繼承不行,因爲Set“是一個”list是錯誤的,他不能包含重複元素。正確的方法是讓Set對象“用list對象來實現”。如下所示:
template <classT>
class Set
{
public:
bool member(const T& item) const;
void insert(const T& item);
void remove(const T& item);
int cardinality() const;
private:
list<T> rep;
};
Set的成員函數可以利用list以及標準庫其他部分所提供的大量功能。所以實現代碼很簡單:
template <class T>
bool Set<T>::member(const&item) const
{ return find(rep.begin(), rep.end(), item) != rep.end()); }
template <class T>
void Set<T>::insert(const T& item)
{ if(!member(item)) rep.push_back(item); }
template <class T>
void Set<T>::remove(constT& item)
{
list<T>::iterator it =find(rep.begin(), rep.end(), item);
if (it != rep.end()) rep.erase(it);
}
template<class T>
int Set<T>::cardinality() const
{ returnrep.size(); }
這些函數很簡單,可以將它們作爲內聯函數;