Объектно-ориентированное дизайнерское предложение
Вот мой код:
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;
}
Мне нужно вызвать все функции-члены Gun над объектом Soldier. Что-то вроде:
soldier.gun.fire();
или же
soldier.getGun().load(15);
Так какой из них лучший дизайн? Скрытие объекта оружия как частного члена и доступ к нему с помощью функции getGun (). Или сделать его публичным членом? Или я могу инкапсулировать все эти функции, что усложнит реализацию:
soldier.loadGun(15); // calls Gun.load()
soldier.fire(); // calls Gun.fire()
Так какой из них вы считаете лучшим?