effective C++筆記之條款40: 通過分層來體現“有一個”或“用…來實現”


  • 分層:使某個類的對象成爲另一個類的數據成員,從而實現將一個類構築在另一個類之上,這一過程稱爲“分層”。
  • 公有繼承的含義是“是一個”。對應地,分層的含義是“有一個”或“用…來實現”。
  • 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(); }
這些函數很簡單,可以將它們作爲內聯函數;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章