private继承与复合

来源:岁月联盟 编辑:猪蛋儿 时间:2012-11-13

private继承定义:private继承而来的所有成员,在derived中都会变成private属性。
应用场合:当一个意欲成为derived class 者想访问一个意欲成为base class 者的protected成分,
或为了重新定义一或多个virtual 函数时可以用private继承。
知识点:
private继承意味只有实现部分被继承,接口部分应略去。
如果classes之间的继承关系是private,编译器不会自动将一个derived class对象转换为一个base class对象,
这样的转换会导致错误。请记住,private继承纯粹只是一种实现技术。

尽量用复合代替private继承。因为复合可避免virtual函数重定义。
事例:
class Widget : public Timer
{
private:
 virtual void onTick() const; //查看Widget的数据等等。
};

//复合实现
class Widget
{
private:
 class WidgetTimer : : public Timer
 {
 public:
  virtual void onTick() const; //查看Widget的数据等等。
 };
 WidgetTimer timer;
};