CとC++構造体の違い

1538 ワード

  • Cの構造内では関数の存在は許されず、C++は内部メンバー関数を許容し、この関数が虚関数であることを許容する.したがって、Cの構造体には、構造関数、解析関数、thisポインタはありません.
  • Cの構造体の内部メンバー変数へのアクセス権はpublicのみであり、C++はpublic、protected、privateの3種類を許可する.
  • C言語の構造体は継承できません.C++の構造体は他の構造体やクラスから継承できます.
  • Cで構造体タイプを定義するには、次のようにtypedefを使用します.
    typedef struct Complex{
      int read;
      int image;
    }Complex;
    
    では、Complex変数を説明するときに
    Complex complex;
    
    と書くことができますが、typedefがなければ
    struct Complex complex;
    
    で宣言する必要があります.ここのComplexは実際にstruct Complexの別名です.また、ここではComplex(struct Complex complex;了)
    typedef struct{
      int read;
      int image;
    }Complex;
    
    を書かなくてもよいが、c++では簡単で、直接
    struct Complex{
      int read;
      int image;
    };
    
    で構造体タイプComplexを定義し、変数を宣言するときに直接Complex complex;
  • c++でtypedefを使用すると、
    struct Complex1{
      int read;
      int image;
    }complex;//complex     
    
    typedef   struct   Complex2{
      int read;
      int image;
    }Complex2;//Complex        
    
    の使用時にcomplexに直接アクセスできるという違いが生じる.readですが、Complex 2はまずComplex 2 complex 2でなければなりません.そしてread = 1;
  • 上記の2つをマスターすればいいのですが、最後にあまり関係のない問題を検討します.cプログラムで
    typedef struct{
      int num;
      int age;
    }aaa,bbb,ccc;
    
    と書いたら何ですか?個人的にコンパイラ(VC 6)の理解を観察すると、これは
    typedef struct{
      int num;
      int age;
    }aaa;
    typedef aaa bbb;
    typedef aaa ccc;
    
    、すなわちaaa,bbb,cccの3つが構造体タイプであることに相当する.変数を宣言するときはいずれでも構いません.c++でも同様です.しかし、c++にtypedefキーワードが書かれている場合、aaa、bbb、cccはまったく異なる3つのオブジェクトになることに注意してください.

  •