Quando utilizzare le classi annidate e quando utilizzare gli spazi dei nomi?

4

In realtà non ho mai fatto uso di spazi dei nomi e li sto prendendo in considerazione al momento.

La mia situazione. Ho una classe Reverb . Contiene come istanze di membri di altre classi, dichiarate nello stesso file di intestazione, sopra di esso. Ora ci sono sempre più strutture di dati, rilevanti per la classe Reverb , ad es. 3 diverse rappresentazioni delle impostazioni dell'utente.

Quindi ho creato una classe Settings, che contiene 3 sottoclassi per le 3 rappresentazioni e alcuni metodi per convertirli.

La mia domanda è dove metterlo?

  • Inseriscilo in Reverb ? Quindi l'API Reverb diventa piuttosto gonfia e pesante per lo scorrimento.
  • Metti in ambito file? Qualsiasi utente dell'intestazione sarà spiacevolmente sorpreso di trovare una classe Settings , che in realtà significa ReverbSettings .
  • Crea un namespace Reverb e metti tutto dentro? Quindi cosa fare con class Reverb ? Sarebbe strano chiedere Reverb::Reverb .
  • Qualunque soluzione migliore?
posta Vorac 05.02.2015 - 16:25
fonte

1 risposta

6

Le domande da porsi possono esistere in una classe annidata senza la sua classe di inclusione? Una classe annidata ha bisogno di visibilità intima nella sua classe che racchiude?

Tendo ad evitare classi annidate in generale a causa dell'accoppiamento stretto. Preferisco rifattorizzare la classe nidificata nella sua classe di primo livello e utilizzare le interfacce / le classi di base virtuali pure per dargli un riferimento a quella che era la sua classe di chiusura. Spesso quello che trovo è che posso avere classi più piccole che sono più focalizzate al laser su un singolo compito e sono riutilizzabili.

In C ++ hai anche la parola chiave friend che può fornire visibilità sugli interni della classe. Mentre dovrebbe essere usato con parsimonia, è utile per quei casi in cui due classi devono lavorare in stretta collaborazione ma non rappresentano la stessa astrazione.

Versione breve: non c'è nulla di sbagliato nelle classi di nidificazione, ma preferiamo gli spazi dei nomi. In rari casi in cui è giustificato, è possibile utilizzare anche friend .

    
risposta data 05.02.2015 - 17:18
fonte

Leggi altre domande sui tag