您的位置:首页 > 运维架构

条款39:明智而审慎地使用private继承

2010-03-25 16:52 330 查看
      private继承其实意味着implemented-in-terms-of(根据某物实现出)。如果你写的class Derived以private继承自class Base,你的用意是为了让 Dervived类采用到Base类中的某些特性,而不是因Dervied对象与Base对象存在一些观念上的关系。

      关于is-implemented-in-term-of(根据某物来实现),尽可能使用复合,必要时才使用private继承。主要就是当protected成员或virtual函数牵扯进来的时候。

//"private"解决
class Widget: private Timer {
private:
virtual void onTick() const; // look at Widget usage data, etc.
...
};
//"复合"解决
class Widget {
private:
class WidgetTimer: public Timer {
public:
virtual void onTick() const;
...
};
WidgetTimer timer;
...
};


另外,涉及 space optimization的极端情况可能会使你倾向于 private inheritance,而不是 composition。
//sizeof(HoldsAnInt) >sizeof(int);一个 Empty data member需要存储。对以大多数编译器,sizeof(Empty) 是 1
class Empty {}; // has no data, so objects should use no memory
class HoldsAnInt { // should need only space for an int
private:
int x;
Empty e; // should require no memory
};
// sizeof(HoldsAnInt) == sizeof(int)
class HoldsAnInt: private Empty
{
private:
int x;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息