这是我的代码:
class Soldier {
public:
Soldier(const string &name, const Gun &gun);
string getName();
private:
Gun gun;
string name;
};
class Gun {
public:
void fire();
void load(int bullets);
int getBullets();
private:
int bullets;
}
我需要在 Soldier 对象上调用 Gun 的所有成员函数。类似这样:
soldier.gun.fire();
或者soldier.getGun().load(15);
那么哪种设计更好呢?将枪对象隐藏作为私有成员,并使用getGun()函数访问它。还是将其设为公共成员?或者我可以封装所有这些函数,但这会使实现更加困难:
soldier.loadGun(15); // calls Gun.load()
soldier.fire(); // calls Gun.fire()
你认为哪一个是最好的呢?
get_gun()
,该函数执行士兵获取枪支所需的工作,就像Stephen展示的那样,但是像Frustrated展示的那样,告诉士兵该做什么,而不是枪支。 - GManNickGsoldier.Attack()
可能 会调用soldier.loadGun()
- 这取决于士兵的“攻击”行为如何定义。但是,装填枪支可能是应该与攻击分离的东西 - 毕竟,有时您会意识到弹药不足,并希望在下一次攻击之前重新加载。有时候你会凭直觉射击,没有时间先检查弹药。 - FrustratedWithFormsDesigner