C++での構造体は構文上も機能的にもクラスによく似ている。
実際のC++での構造体とクラスの違いは、メンバがデフォルトで非公開か公開かという違いしかない。
クラスの宣言形式
class type-name { //非公開関数とデータメンバ public: //公開関数とデータメンバ } object-list;
構造体の宣言形式
struct type-name { //公開関数とデータメンバ private: //非公開関数とデータメンバ } object-list;
なぜ2種類が用意されているのか、その理由としては次のようなものがある。
(積極的な理由)Cからの上方互換性を維持するため(Cでは全ての構造体メンバがデフォルトで公開である)
(消極的な理由)C++で構造体の定義を拡張してメンバ関数を含めても、特に不利益はない
また、C言語の構造体とC++での構造体の違いは、
・C言語では変数しか持ち得なかった構造体が、メンバ関数を持つことができる(したがって、コンストラクタ、デストラクタも)→これが上述した、クラスとほぼ同義となっている理由
・C++では構造体のタグ名がそのオブジェクトを宣言するときに使用する完全な型名となる(Cではタグ名を完全な型名とするにはstructをつける必要があった。そうでなければtypedefキーワードを用いる必要があった。)