Effective C++ 第4章23項
メンバ関数より、メンバでもfriendでもない関数を使おう。それによって、カプセル化の度合いを増し、柔軟性と機能拡張性を持たせることになる。
これはまだ読んでもいまいちしっくりきていない。
本を読みながら、自分なりにサンプルコードを考えてみる。
たとえばRPGのプレイヤーキャラクターを表すクラスがあり、メンバ関数としてHP回復とMP回復があったとする。
class Player { public: void HealHP(); void HealMP(); };
ここで全回復するという機能を考える。プレイヤークラスにその機能を追加すると次のようなコードに。
class Player { public: void HealHP(); void HealMP(); void HealAll() { HealHP(); HealMP(); } };
メンバ関数としてではなく、メンバでない関数で機能を実装するとすると、
void HealAll(Player& player) {
player.HealHP();
player.HealMP();
}
つまり、便利関数として機能を用意するということ。