条款39: 避免 "向下转换" 继承层次
从一个基类指针到一个派生类指针 ---- 被称为 "向下转换".
应该使用虚函数替代,避免向下转换。
安全的向下转换,过C++的dynamic_cast运算符(参见条款M2)来实现。
条款40: 通过分层来体现 "有一个" 或 "用...来实现"
使某个类的对象成为另一个类的数据成员,从而实现将一个类构筑在另一个类之上,这一过程称为 "分层"(Layering)。"分层" 这一术语有很多同义词,它也常被称为:构成(composition),包含(containment)或嵌入(embedding)。
c
class Address { ... };
class PhoneNumber { ... };
class Person {
public:
private:
string name; // 下层对象
Address address; // 同上
PhoneNumber voiceNumber; // 同上
PhoneNumber faxNumber; // 同上
};
用 list实现有序set
c
template<class T>
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
};