2011-01-10 11 views
1

クラスがあると、次の2つのコードスタイルのどちらが推測されますか?メンバー変数の前にメンバー関数を配置する理由は何か?

Style A: 
class Foo { 
    private: 
     doWork(); 

     int bar; 
} 

Style B: 
class Foo { 
    private: 
     int bar; 

     doWork(); 
} 

私にとって、彼らはネクタイです。私はスタイル変数Aがより細かく感じられ、より一般的なメンバ関数を過ぎて現れるので、スタイルAが好きです。しかし、私はまた、スタイル変数Bは、メンバー変数がOOPスタイルの方法で、クラスが表すものを決定するように見えるため、スタイルBが好きです。

これら2つのスタイルを選択する際に考慮する必要がある他のものはありますか?

+0

Cにはクラスがないため、Cタグが削除されました。 –

+0

データメンバーは、クラスが表すものを特定しません。彼らは_how_を定義します。クラスはそれが表すものを表します。クラスのパブリック・インタフェースは、主にパブリック・メンバ関数から構成され、クラスが表すものを定義します。 –

+0

@Ninefingersありがとう、私はちょうど2回考えることなくそのタグを投げた* facepalm * –

答えて

2

C++では、クラスを使用するユーザーは、ヘッダーファイルのコードで定義を参照するのが一般的です。

Javaでは、JavaDocコメントから生成されたドキュメントをクラスを使用して参照するのは一般的です(しかし普遍的ではありません)。 IDEのサポートスタイルB.したがって

:Cで

  • は++ Iは、ヘッダファイルの先頭にパブリックインターフェイスを配置すること、スタイルAを使用します。
  • Javaでは、スタイルBを使用してメソッドの上にデータを配置します。
1

少なくともあなたは正しいです、それは唯一のスタイルです。また、スタイル(ガイド)の唯一の理由は、コードを読みやすくすることです(膨大なオーディエンスにとって)。

スタイルBがより一般的であるため、読者はもっと読めるようになり(スタイルAよりも速く読むことができます)。これはスタイルB(少なくともjava、c#、phpなど)を使うべき理由です。

+0

BはJavaでより一般的ですが、私はそれがC++で宣伝されたことはありません。もちろん、1つのデータポイント(私)は傾向を作っていません。まだ、私はあなたがそれが普遍性を誇張していると思います。 –

+0

@Edwin Buckなぜ私はJava、C#、PHPについて言及しましたが、C++ではありません(私はC++プログラマーではありません)。 – Ralph

0

私はそれが価値あるものであると、スタイルBを教えられ、スタイルAよりも頻繁に見ています。さらに、言語(Unreal Script、言語と呼んでいる場合)は、コンパイラのチェックによってスタイルBを適用します。

関数のスコープ内では、使用する前に宣言されている変数が常に表示されるため、意味があります。通常、関数はメンバ変数を変更するので、これはクラスによく変換されます。

0

UML Class Diagramを見ると、ボックスには3つの部分があることがわかります。上部はクラスの名前を保持し、中間は属性を保持し、下部はメソッドを保持します。

これは私のコードを書くのが私のデザインによく似ているので、これも同じです。

0

スタイルAは、読者が先頭に戻って参照するのではなく、使用されている場所に変数を近づけることができます。

0

通常、クラス定義は暗黙的にプライベートであり、データメンバは公開されていないため、多くのメンバ関数が公開されているため、人々はスタイルAを使用します。つまり、アクセシビリティがはるかに簡単なため、まずデータメンバーを定義するのが最も簡単です。

class A { 
    int bar; 
public: 
    doWork(); 
}; 
0

C++でのプログラミング私の好みのスタイルはAです。ここで強調するのはクラスにあるAPIです。このようなもの:

class SomeClass 
{ 
public: 
    void foo(); 
    void bar(int i); 

private: 
    int m_i; 
}; 

ここで重要なのは、このクラスのインターフェイスにありますので、読者はすぐに最初にそれを見ることができます。カプセル化のために、プライベートパーツは最初に見ることが重要ではないので、最後に来るべきだと思うことさえあります(後で)。一方、例えば、 (低レベルの)メッセージ構造体は、会員が最初に情報を提供するところの逆のことを、これが最も重要である可能性があるので、情報を主張することができます。このようなもの:

struct SomeMessage 
{ 
    uint64_t m_id; 
    int32_t m_number; 
    char  m_name[16]; 

    explicit SomeMessage(uint64_t id); 
}; 

私は信じている情報を見つけ出すのが好きです。一貫性があり、すべての慣習が混在しているわけではありませんが、私が思う唯一のことは重要です。

関連する問題