class と struct は、本質的にはほぼ同じ機能を持つ。
どちらもクラス型(C++)であり、
- データメンバを持てる
- メンバ関数を持てる
- コンストラクタ(C++)やデストラクタ(C++)を定義できる
- 継承(C++)やテンプレートなどの仕組みも同様に使える
主な違い
違いは主に、デフォルトのアクセス指定子である。
structのメンバはデフォルトでpublicclassのメンバはデフォルトでprivate
また、継承のデフォルトアクセスも異なる。
structの継承はデフォルトでpublicclassの継承はデフォルトでprivate
struct Base1 {};
struct Derived1 : Base1 {}; // public 継承
class Base2 {};
class Derived2 : Base2 {}; // private 継承使い分けの慣習
機能差は小さいが、慣習として次のように使い分けられることが多い。
struct: 単純なデータの集まりclass: 不変条件を守りたい型や、内部実装を隠したい型
ただし、これはあくまで慣習であり、絶対的なルールではない。
補足
構造体でも、private メンバやメンバ関数を持つことはできる。
逆に、クラスでもすべてを public にして使うことはできる。