ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

メンバ関数より、メンバでもfriendでもない関数を使う

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();
}

つまり、便利関数として機能を用意するということ。