在派生类中使用受保护的说明符

时间:2014-10-30 08:22:31

标签: c++ private protected derived-class

我不确定成员var isMouseOverYard的正确访问说明符。在摘录中,我没有计划继承House。选项1与基类更一致(如果我从任一类继承,我可以检查鼠标是否在对象/码上)。但是,如果我不从House继承,则选项2更符合我目前的意图。关于这种用法是否有约定?

class Object
{
protected:
    virtual bool isMouseOverObject() const;
};

选项1

class House : public Object
{
protected:
   virtual bool isMouseOverObject() const override;
   bool isMouseOverYard() const;
};

选项2

class House : public Object
{
protected:
   virtual bool isMouseOverObject() const override;

private:
   bool isMouseOverYard() const;
}

4 个答案:

答案 0 :(得分:2)

我的一般经验法则是将可见度限制在最大程度。即我会在isMouseOverObject课程中将House设为私有。

答案 1 :(得分:1)

两个选项都很好,选项2更好,因为支持方法可能对您的类是私有的,对其他人隐藏,被私人限制并且可以被类成员访问

答案 2 :(得分:1)

这并不重要。我要留下它protected,因为它将来会更灵活,而且无论如何它都是一种常规方法,所以如果有人"它不会造成任何太大的损害。滥用"它

答案 3 :(得分:0)

约定,至少是Bjarne Stroustroup,如果我没记错的话,永远不会保护数据。这有时看起来很诱人,但通过get / set函数访问数据成员几乎总是更好。然后可以对这些函数进行保护,使它们可用于派生类,但不能用于外部世界。

因此,在您的情况下,我会选择选项2,并考虑添加一些简单的get / set函数以备不时之需。

编辑:我被误导认为这个问题是关于一个变量而不是一个函数,因为OP的拼写错误。