Una classe può trovarsi in un'altra classe?

5

Ecco un estratto da "Il linguaggio di programmazione C ++"

template<classT> class List { // optimal
public:
class Link { /* ... */ };
List (); // initially empty
void put(T *); // put before current element
T* get(); // get current element
/ / ...
};

Possiamo creare una lezione in un'altra classe? Che ne dici di altre lingue? Per PHP vedi questa domanda

    
posta nischayn22 31.05.2012 - 07:52
fonte

3 risposte

14

Si chiama classe nidificata . Alcuni linguaggi (C ++) lo consentono, altri (PHP) no.

Non è tecnicamente necessario che una lingua lo supporti, ma a volte aiuta a prevenire ingombranti spazi dei nomi esterni. Nel caso di STL, offre un modo ordinato di organizzare tipi dipendenti come gli iteratori (ad esempio list<T>::iterator e vector<T>::iterator invece di list_iterator<T> e vector_iterator<T> , l'ex dipendenza funzionale di segnalazione molto più chiaramente).

    
risposta data 31.05.2012 - 08:03
fonte
6

Can we make a class inside another class ?

Sì, in C ++ è possibile, si chiama una classe nidificata. Tuttavia, questa classe è più come un'estensione della sua classe contenente, quindi non dimenticare che la sottoclasse può accedervi con i membri della classe anche se sono privati.

Vedi link ... anche link

How about other languages?

Dovrai controllare ogni lingua, ma so che almeno Python lo consente, con semantica diversa. Non dare per scontato che le funzionalità forniscano esattamente la stessa semantica tra le lingue.

    
risposta data 31.05.2012 - 08:01
fonte
0

Sicuro! Anche se non fa nulla tranne cambiare l'ambito e forse dare una struttura al tuo codice.

Vale anche la pena notare la funzionalità di classe interna di Java. È una classe nidificata in grado di accedere alle variabili di istanza della classe che la include. Per esempio. se hai una classe, Outer, che contiene una classe interna, Inner, puoi accedere ai campi di Outer dalla classe interna con la sintassi Outer.this.banana (dato che Outer ha il campo banana). Per creare un'istanza di una classe interna bisogna prima avere un'istanza della classe esterna. Ciò significa anche che un oggetto della classe interiore non può sopravvivere alla sua classe esterna. Trovo che questa sia una caratteristica molto utile di Java. Per ottenere il comportamento di una normale classe nidificata in Java, dichiararla statica.

Altre lingue di cui sono a conoscenza che supportano classi annidate (non necessariamente classi interne) sono C ++, C # e python.

    
risposta data 31.05.2012 - 08:54
fonte

Leggi altre domande sui tag