我不确定成员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;
}
答案 0 :(得分:2)
我的一般经验法则是将可见度限制在最大程度。即我会在isMouseOverObject
课程中将House
设为私有。
答案 1 :(得分:1)
两个选项都很好,选项2更好,因为支持方法可能对您的类是私有的,对其他人隐藏,被私人限制并且可以被类成员访问
答案 2 :(得分:1)
这并不重要。我要留下它protected
,因为它将来会更灵活,而且无论如何它都是一种常规方法,所以如果有人"它不会造成任何太大的损害。滥用"它
答案 3 :(得分:0)
约定,至少是Bjarne Stroustroup,如果我没记错的话,永远不会保护数据。这有时看起来很诱人,但通过get / set函数访问数据成员几乎总是更好。然后可以对这些函数进行保护,使它们可用于派生类,但不能用于外部世界。
因此,在您的情况下,我会选择选项2,并考虑添加一些简单的get / set函数以备不时之需。
编辑:我被误导认为这个问题是关于一个变量而不是一个函数,因为OP的拼写错误。