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つのオブジェクトになることに注意してください.