【初心者歓迎】C/C++室 Ver.42【環境依存OK】

このエントリーをはてなブックマークに追加
544デフォルトの名無しさん
ストラテジパターンを使って主要な処理をストラテジに委譲しようとしているんだが
処理に必要なメンバ変数はストラテジ基底クラスをfriend指定して
ストラテジ基底クラスからprotectedでgetterを作って
実装部に当たる派生クラスに限定公開している。んで、思いの外getterの数が多くなったから
いっそストラテジ派生クラスを全てfriend指定しようかとも検討しているんだが
どっちの方が良いかな。始めからクラスのメンバに全てgetterを付ける、と言う手もあるけど。
やっぱりこの辺は好みの問題?
545デフォルトの名無しさん:2007/09/17(月) 18:35:46
>>544
もっと具体的に書いてよ
546デフォルトの名無しさん:2007/09/17(月) 18:44:07
簡単に書くと
class Enemy
{
public:
action(){ m_pstrategy->action() }

private:
int m_hp;
float m_speed;
float m_direction;

friend class EnemyStrategy;
EnemyStrategy* m_pstrategy;
};

class EnemyStrategy
{
public:
virtual void action()=0;

private:
Enemy* enemy;
protected:
int getHP(){ return enemy->m_hp; }
float getSpeed(){ return enemy->m_speed; }
};

みたいな感じになってる。規模はもうちっと大きいけどね。
あくまでみたいな、だから↑のコードの意図したとこ以外のツッコミは無しの方向で・・・
547デフォルトの名無しさん:2007/09/17(月) 19:18:39
>>546
Enemy から頻繁にアクセスされる属性を抜き出して EnemyParameter
クラスを作り、EnemyStrategy.action(EnemyParameter&) とする。
EnemyParameter には public な getter を用意し、Enemy の private
メンバとする。俺ならこの場面で friend と protected は使わない。
548544:2007/09/17(月) 19:34:09
一つに纏める事も考えていたが・・・ふむ、ちゃんと考えてみようかな
死亡権限や影響権限等を少々凝った形で持たせてるがなんとかなる範囲だし

回答d