Effective C++勉強メモ: Item 22 データメンバは黙って`private`
クラス内のデータはpublic
でもprotected
でもなくprivate
にしよう。という話。
ポイントは三つ
構文の統一
オブジェクトのAPIはすべて関数(か演算子)になり、a.something
だったかa.something()
だったか悩む必要がなくなる。
データアクセスレベルのコントロール
getter/setter関数を実装するかどうかで
- read-write
- read-only
- write-only
- hidden
の四つのアクセスレベルを簡単にコントロールできる。
カプセル化
データメンバに直接アクセスされる場合、内部での実装変更はAPI変更になり、その影響の範囲は限定できない。これはprotected
でも同じで、このクラスを継承するすべてのクラスを影響し得る以上、原則的には変更の影響範囲を限定することができない。
逆に外部、継承クラスに提供するものが関数のみであれば、getterだったものが実は別のデータをもとに計算するようになった、などの実装変更をAPI変更なしで行える。
データは黙ってprivate
。