Arantium Maestum

プログラミング、囲碁、読書の話題

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