Ryukalice

構造体とクラスの違い

2013-12-19

以下のようなコードを書いていたら、「構造体にもコンストラクター書けるの?」と驚かれました。確かに、構造体はCの構造体そのままの機能だと思っている方は多い気がします。驚かれたのは、以下のようなコードです。

struct TSampleStructure {
    unsigned int member1;
    unsigned int member2;

    TSampleStructure () : member1(0), member2(0) {}
};

構造体とクラスに、デフォルトのアクセス属性以外の違いはありません。構造体はpublic, クラスはprivateです。コンストラクター、デストラクターが書けることは勿論、メソッドも持てるし、継承だってできます。[JIS X3014:2003の9.クラス]には、こう書かれています。

構造体は,《クラスキー》structを付けて定義するクラスとする。そのメンバ及び基底クラスは,特に指定がない限り公開となる。

「structを付けて定義するクラスとする。」と明確に書かれています。つまり、構造体はクラスの一種です。共用体(union)なんかも同様です。