構造体はクラスの一種

編集

C++の構造体(struct)は、メンバーがディフォルトのアクセス指定子が publicclass です。 class のディフォルトのアクセス指定子は private です。 classstruct の違いはこれだけです。

共用体もクラスの一種

編集

C++の共用体(union)は、基本的にC言語の共用体と同じです。 ただし、C++では構造体がほぼクラスのように扱われるようになったので、ほとんどの共用体もクラスとして扱われます。 つまり、アクセス制限を指定したり、メンバー関数を持つことができるのです。 一方で、当然ながら、共用体には固有の制限があります。

C++の共用体は以下の制限を持ちます。

  • 継承の機能がありません。仮想関数を持ちませんし、基底クラスを持てず、基底クラスにもなれません。
  • 以下のようなオブジェクトは要素にできません。
    • ユーザー定義コンストラクターを持つオブジェクト
    • ユーザー定義コピーコンストラクターを持つオブジェクト
    • ユーザー定義コピー代入演算子を持つオブジェクト
    • ユーザー定義デストラクターを持つオブジェクト
  • 共用体は、static データメンバーを持てません。
  • 共用体は、参照を持てません。