2011-12-19 11 views
-1

可能性の重複:
What are the differences between struct and class in C++
class and struct in c++C++のstruct OOクラスOO対

それは、その構造体のように見える

できコンストラクタとデストラクタとメンバを持っており、非常にシンプルに見えますが、そうすることができます私たちはstructをclassの代わりに使用します。

https://github.com/developmentseed/node-sqlite3/blob/master/src/database.h#L32

struct Baton { 
    uv_work_t request; 
    Database* db; 
    Persistent<Function> callback; 
    int status; 
    std::string message; 

    Baton(Database* db_, Handle<Function> cb_) : 
      db(db_), status(SQLITE_OK) { 
     db->Ref(); 
     uv_ref(uv_default_loop()); 
     request.data = this; 
     callback = Persistent<Function>::New(cb_); 
    } 
    virtual ~Baton() { 
     db->Unref(); 
     uv_unref(uv_default_loop()); 
     callback.Dispose(); 
    } 
}; 

struct OpenBaton : Baton { 
    std::string filename; 
    int mode; 
    OpenBaton(Database* db_, Handle<Function> cb_, const char* filename_, int mode_) : 
     Baton(db_, cb_), filename(filename_), mode(mode_) {} 
}; 

答えて

2

唯一の違いは、デフォルトのアクセスレベル(クラスのprivate、構造体のpublic)です。それ以外は完全に互換性があります。あなたはあなたが好きなものを決めて、いつもそれを使うべきです(一貫性はコードを読みやすくします)。

1

classstructの唯一の違いは、メンバーと基本クラスへのデフォルトのアクセス権です。 structのために、それはpublicあるとclassのために、それはprivateです。

2

私たちはクラスを使用しなければならないときに我々は機能を持つ構造体を使用しなければなりませんか?

それは完全にあなたの選択です。
1は、C++での構造を持つクラスやないでできることは何もありません。

構造とクラスの唯一の違いは以下のとおりです。

ちょうど
    ので、構造体のクラスや公共のための民間への
  • アクセス指定子のデフォルトは構造体のためのクラスや公共のための民間へ
  • 継承デフォルト

あなたの選択の1つを使用し、それを一貫して使用することに固執する、クラスと構造を混在させないでください。

1

他の構造体で述べたように、&クラスは、デフォルトのアクセスレベル以外の違いはありません。しかし、データ集約のために構造体を使用するのが一般的です。それは、構造体がCで縮小されるためです。たとえば、ユーザー定義のPODは、ほとんど常に私の経験では構造体として作成されます。

3

もう1つの方法を優先する技術的な理由はありませんが、classまたはstructの使用に関する特定の規約に気付きました。

あなたのデータ型がプログラムの他の部分(つまり、それが 'インターフェース'の一部)で使用されるものであれば、通常は人々がそれを重要度を示すためにclassにします。データ型は、関数又はクラスの実装でのみ使用され、それが特定の範囲の外で可視でない場合、それstructします。

これらは、いくつかの非常にroughtガイドラインですが、あなたがそれらに従わない場合は誰も文句を言わないだろう。


編集:Cで ++が両者の間に実質的な違いはませんが、C++に触発されている他の新しい言語が実際にstructclass異なるが行われてきました。たとえば、C#とDでは、classstructの両方がデータ型を定義するために使用されますが、同じではありません。structが実装されているため、「小さな」型に使用する必要があります。

0

主な相違点は、メンバーのデータと関数のデフォルトのアクセスレベル、つまりクラスのprivateと構造体のpublicです。デフォルトの継承アクセスレベルについても同じことが言えます:クラスはprivate、構造体はpublicです。

どのような場合に使用するかは、会社にとっては何が正常なのかという問題です。私の経験では、ほとんどの企業や個人は、独自のデータや構造体で動作する関数のコレクションを格納するための純粋なデータとクラスのパケットを保持するために構造体を使用します。

このメソッドは、structsがデータだけを格納することができ、関数ではないので、ほとんどの人がC++でこの定義に固執したいと考えるCプログラミングの後戻りです。

関数を含んでいない構造体のコードで一貫性が失われているように見えるのは、一般的にfunctorの構造体を使用することですが、functorは通常、さらに、1つの関数や継承された構造に公開する必要がなくなりました。...ああ、入力しないでください。

+0

範囲は同じです。アクセスレベルは異なります。 –

+0

それを指摘してくれてありがとう。私は訂正で私の答えを編集しました – BigDaveDev

-2

クラスは参照型です。クラスのオブジェクトが作成されると、オブジェクトが割り当てられる変数はそのメモリへの参照のみを保持します。オブジェクト参照が新しい変数に割り当てられると、新しい変数は元のオブジェクトを参照します。ある変数で行われた変更は、両方とも同じデータを参照するため、他の変数に反映されます。

は値型です。構造体が作成されると、構造体が割り当てられる変数は構造体の実際のデータを保持します。構造体が新しい変数に代入されると、構造体はコピーされます。したがって、新しい変数と元の変数には、同じデータの2つの別々のコピーが含まれています。あるコピーに加えられた変更は、他のコピーには影響しません。

一般的に、クラスは、より複雑な動作や、クラスオブジェクトの作成後に変更されるデータをモデル化するために使用されます。構造体は、主に構造体の作成後に変更する予定のないデータを含む小さなデータ構造に最適です。

+0

あなたはC++について話していますか? – fefe

+0

@Michael:これはC++の質問です。 –