Ecco il mio codice:oggetto di design orientato suggerimento
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;
}
ho bisogno di chiamare tutte le funzioni membro di pistola nel corso di un oggetto Soldato. Qualcosa di simile:
soldier.gun.fire();
o
soldier.getGun().load(15);
Quindi qual è un progetto migliore? Nascondere l'oggetto pistola come membro privato e accedervi con la funzione getGun(). O renderlo un membro pubblico? O posso incapsulare tutte queste funzioni renderebbe l'implementazione più difficile:
soldier.loadGun(15); // calls Gun.load()
soldier.fire(); // calls Gun.fire()
Quindi quale pensi sia il migliore?
Combina le risposte di Stephen e Frustrato. Avere un privato 'get_gun()' che funziona necessario per il soldato per ottenere la pistola, come Stephen mostra, ma dire al * soldato * cosa fare, non la pistola, come mostra frustrato. – GManNickG
@GMan - Grazie, sono d'accordo. Tuttavia, invece dell'approccio di @ Frustrated, dire al soldato cosa fare sarebbe l'approccio di @ Austin? per esempio. soldier.Attack() invece di "soldier.loadGun()". – Stephen
@Stephen: Sì, puoi rendere l'incapsulamento più profondo che vuoi. La mia domanda riguardava solo questa parte. Naturalmente puoi dire soldato.Attacco() e all'interno di questa funzione puoi controllare se (! Gun.getBullets()) tornare o cose del genere. – pocoa