C++structとclassの違い

3689 ワード

C++ではclassとstructは2つの主な違いしかありません.
  • デフォルトの継承権限.デフォルトではclassの継承はprivateで継承され、structはpublicで継承されます.
  • メンバーのデフォルトのアクセス権.classのメンバーのデフォルトはprivate権限、structのデフォルトはpublic権限です.

  • 他の特性はstructとclassが基本的に、厳密には同じです.01 // , struct class 。 02 // GCC 4.4.1 03 #include <iostream> 04 #include <string> 05
    using namespace std; 06
      07
    struct bar 08 { 09      private : // 10          int y; 11      public : 12          bar(){}; // 13          bar( int a){ y = a;} // 14          ~bar(); // 15          void say(); 16          virtual void func1() = 0; // 17 }; 18
      19
    struct  foo: protected bar // 20 { 21      private : 22            int x; 23      public : 24           foo(){}; 25           void say(string msg) {cout<<msg<<endl;} 26           virtual int func2(); // 27
      28 }; 29
      30
    int main() { 31      return 0; 32 }
    次のように表示されます.
  • にはメンバー関数があります.structはclassと同じ構造関数、解析関数、リロード演算子、友元クラス、友元構造、友元関数、虚関数、純虚関数、静的関数を含むことができます.
  • デフォルトのアクセス権は異なりますが、public/private/protected修飾子を持つことができます.
  • は、複雑な継承および多重継承を行うことができ、1つのstructは1つ以上のclassから継承することができ、逆も可能である.
  • ここではC言語とは異なり、C言語のstructは本質的にデータを包装する文法メカニズムにすぎないことに注意してください.

  • Google C++プログラミングスタイルガイドでも、
    データがある場合にのみstructを使用し、その他はclassを使用します.
    C++では、キーワードstructとclassはほぼ同じ意味で、定義されたデータ型のためにどのキーワードを使用するかを合理的に選択するために、その人に意味を追加します.
    structはネガティブオブジェクトのみを含む(passive objects)に用いられ、関連する定数を含む可能性があるが、データメンバー外にアクセスする関数機能はなく、アクセス機能は直接アクセスによって実現され、メソッド呼び出しを必要としない.ここで言及する方法は、構造関数、構造関数、Initialize()、Reset()、Validate()などのデータメンバーにのみ使用される方法を指す.
    より多くの関数機能が必要な場合はclassが適しており、不確定であればclassを直接使用します.
    STLを結合しない場合、シミュレーション関数(functors)および特性(traits)にはclassではなくstructを使用することができる.
    一部のC++専門家はstructキーワードを使用するのではなく、class{public:}を常に使用することができると主張しています.しかし、実際にはstructはコードの中で広く使用されており、開発者はstruct(一部はC言語の影響によるものでもある)を使用して軽量レベルの厳密なパッケージを必要としない記録を表すことが多い.例えば、ファイルに書き込まれた記録やデータベーステーブル構造はstructで宣言されることが多い.classは主にオブジェクト向けのプログラミングに用いられる.
    一般的にstruct構造を使用する必要がある主な理由は、次のとおりです.
  • メンテナンスレガシーシステムを開発します.
  • は、従来のAPIと通信する必要がある.

  • もちろんstructを使用すると、コードがより簡潔に見える場合があります.1
    struct Compare { bool operator() { ... } }; 2 std::sort(collection.begin(), collection.end(), Compare());
    C++の高度な特性と文法の詳細が多すぎるため、一定のプログラミング規範に従う必要がある.