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

まず第一に、コードが現在どのようになっているかについては必要ありません。コードセクションが次の可能性があるため必要です。

  • ずっと長くなる
  • 別の順序、または別のクラスにカット アンド ペーストするか、新しいクラスにコピーする
  • 前または後のセクションを変更せずに、いくつかのセクションでアクセス指定子を変更する

前のセクションと同じアクセス仕様を持つセクションを信頼していると、非常に頻繁に、コードが変更されたときに、あなた (または今から 6 か月後のあなた、または他の誰か) がそれを変更するのを忘れてしまい、コードが間違っていることになります。

于 2012-07-06T12:59:25.247 に答える
3

正式な理由は1つだけです。アクセス指定子間のデータメンバーはメモリ内で順番に並べ替えられますが、アクセス指定子間のデータメンバーはメモリ内で並べ替えられる場合があります。

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

2つ目public:は、オプティマイザーのためのより多くの余地を与えます。

于 2012-07-06T14:20:44.553 に答える
3

画面上の行よりも多くのメソッドを持つクラスを見る場合に便利です。

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

数回繰り返すことpublic:で、これらすべてが公開されていることを人々に思い出させることができます (もちろん、端末に行よりも多くのメソッドがあるということは、端末が少し小さいか、クラスが大きすぎることを意味します)。

于 2012-07-06T12:52:53.113 に答える
0

それを行うための言語的な目的はありません。悪いスタイルだと思います。しかし、特定の種類のすべてをセクションに分割してから、そのセクションをパブリック/保護/プライベートエリアに分割することを好む人もいます。次に、パブリック要素以外のものがない場合、パブリックキーワードが重複して繰り返されます。

ばかげていると思います。しかし、コードをこのように整理すると便利な人もいます。

于 2012-07-06T12:55:15.323 に答える