4

当下一行就在它的正下方或它下面的几行时,一遍又一遍地声明多个“公共”说明符的目的是什么。当代码修改某些标识符的属性时,我可以理解这是要求,即隐藏在宏中的那些(因此更改宏中的访问属性,因此我们需要从宏中“重新定义”),或者当我们每个访问说明符部分有许多标识符时。但是一遍又一遍地使用“public”,“public”的目的是什么?

代码 ...

class CDrawMFCView : public CView
{
protected: // create from serialization only
    CDrawMFCView();
    DECLARE_DYNCREATE(CDrawMFCView)

// Attributes
public:
    CDrawMFCDoc* GetDocument() const;

// Operations
public:

// Overrides
public:
    virtual void OnDraw(CDC* pDC);  // overridden to draw this view
    virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
  // etc.,

};
4

4 回答 4

4

对于初学者来说,现在不需要代码,因为代码部分可能:

  • 变得更长
  • 被剪切和粘贴到不同的顺序,甚至到不同的类,或复制到一个新的类
  • 让某些部分更改访问说明符而不改变前面或后面的部分

如果您依赖与前一部分具有相同访问规范的部分,那么您(或您,从现在起六个月后,或其他人)经常会在代码更改时忘记更改它,然后代码就会出错。

于 2012-07-06T12:59:25.247 回答
3

在查看具有比屏幕上的行更多的方法的类时,它可能很有用,所以你只需看看,说

...
void f();
void g();
void h();
...

通过重复public:几次,您可以提醒人们所有这些都是公共的(当然,终端中的方法多于行意味着您的终端有点小或类太大)。

于 2012-07-06T12:52:53.113 回答
3

只有一个正式的原因:访问说明符之间的数据成员在内存中按顺序排列,但访问说明符之间的数据成员可能在内存中重新排序。

class Foo {
  public:
    int a;
    int b; // Must come after a
  public:
    int c; // Does not have to come after a and b.
};

第二个public:为优化器提供了更多空间。

于 2012-07-06T14:20:44.553 回答
0

这样做没有语言目的。我认为这是不好的风格。但是有些人喜欢将特定种类的所有内容划分为一个部分,然后将该部分划分为公共/保护/私人区域。然后,当它们碰巧只有公共元素之外的任何东西时,公共关键字就会重复重复。

我认为它愚蠢。但是有些人发现以这种方式组织他们的代码很有用。

于 2012-07-06T12:55:15.323 回答