2011-07-26 6 views
6

Cスタイルの構造体の代わりに非常に単純なクラスを書くことがよくあります。通常、次のようになります。C++標準コンストラクタを生成

class A 
{ 
public: 
    type mA; 
    type mB; 
    ... 
    A(type mA,type mB,...) : mA(mA),mB(mB),... {} 
} 

これは賢明なやり方ですか?もしそうであれば、私はそこにサードパーティのプラグインがあるかどうか、またはコンストラクタのテキストを自動的に構築するための便利なショートカットがあるかどうか疑問に思っていました(例えば強調表示されたメンバー定義を取り、セミコロンをコンマで置き換え、 ...)?ありがとう

+2

スタイルノートと同じように、1行に入れることはお勧めしません。 2-3の属性を取得すると、扱いにくくなります。代わりに、各イニシャライザとおそらく各パラメータをそれ自身の行に置きます。これにより、新しい項目の追加が容易になり、すべてのソースコントロールdiffにはっきりと表示され、コードを読みやすくなります(通常、コードは追記型、読み込み型です)。 –

+0

Sidenote:技術的には、C++の 'struct'と' class'の唯一の違いは、デフォルトのアクセス指定子です。もし全てが公開されたら、それを 'struct'にするだけです(上記のコードで' class'を 'struct'で置き換え、' public: 'アクセス指定子を削除してください) –

答えて

11

struct A 
{ 
    type mA; 
    type mB; 
    ... 
}; 

は使用方法:

A x = { mA, mB, ... }; 

を集計がまったくカスタムコンストラクタ、デストラクタと代入演算子を持っていない、それはできますが、それは次のようになります多くの最適化が可能です。たとえば、中括弧の構文を使用した集約初期化では、通常、メンバーもコピーなしで作成します。また、コンパイラによって定義された最適なコピーと移動コンストラクタと代入演算子を取得します。

+0

これは、デストラクタを必要としない場合にのみ動作します –

+0

OPは "非常にシンプルなクラス"と言いました。デストラクタの必要性は、明らかに単純ではないクラスの特徴です! :-) –

+0

@Jeff:OPは彼がCスタイルの構造体のためにこれをdoibgしていると言います。だからあなたはこれを推測することができます。 –

1

編集:前のバージョンはc99ではなく、C++でした。現在はC++です

私はコンストラクタを書くのではなく、{}初期化を使うことができると思います。またはそれはC++ 0xですか? c99?私はわかりません。はい、単なる集合体を使用

struct A myA = { 3, 5}; 
+1

@Ali:あなたはただ削除することができますそれで?またはそれを改善する? –

+0

は思っていません。実際にそれをテストします。 PSそれはC++としてコンパイルされません –

0

OOの狂信者は、あなたが持っているカプセル化の欠如についてコメントするかもしれませんが、それを行うには賢明な方法だったと思います。 Visual Studioには、あなたが探しているジョブの半分を実行しますが、IDEに依存するコードスニペットがあります。

関連する問題