La classe locale, la classe interna e la classe nidificata significano le stesse cose in C++?La classe locale, la classe interna e la classe nidificata sono le stesse cose in C++?
risposta
Le classi locali e le classi annidate sono animali diversi.
A La classe nidificata è una classe dichiarata nell'ambito di un'altra classe.
A La classe locale è dichiarata all'interno di una definizione di funzione.
La classe interna è un termine C++ non standard, quindi non sono sicuro di come definirlo.
classi nidificate:
IBM Documentazione come una bella documentazione here.
Per riassumere:
- Il nome di una classe annidata è locale alla sua classe racchiude. A meno che non si utilizzino puntatori, riferimenti o nomi di oggetto espliciti, le dichiarazioni in una classe nidificata possono utilizzare solo costrutti visibili, inclusi nomi di tipi, membri statici ed enumeratori dalla classe che include e dalle variabili globali.
- Le funzioni membro di una classe nidificata seguono le normali regole di accesso e non dispongono di privilegi di accesso speciali per i membri delle classi che li accludono. funzioni membro della classe contenitrice non hanno accesso speciale ai membri di una classe annidata
Classi locali:
Questa risposta mio here documenti i punti sottili associate con le classi locali.
Citando progetto di C++ 11 (N3290):
9.7 dichiarazioni di classe nidificati [class.nest]
1 Una classe può essere dichiarata all'interno di un'altra classe. Una classe dichiarata all'interno di un'altra classe è chiamata classe nidificata .
9.8 dichiarazioni di classe locali [class.local]
1 Una classe può essere dichiarata all'interno di una definizione di funzione; tale classe è chiamata classe locale.
Non esiste un concetto di classe interna specificato nello standard C++.
Le classi interne acquisiscono il riferimento this
della classe in allegato. Una gerarchia di istanze di classe interna forma una struttura ad albero. Questo è unico per Java.
- 1. classe interna e la classe esterno in C#
- 2. Classe interna classe Golang
- 3. Comportamento membro diverso della classe interna se la classe interna estende la classe esterna?
- 4. Chiamare la funzione di classe esterna dalla classe interna
- 5. La classe interna privata sintetizza la classe anonima inaspettata
- 6. Subclassing classe interna da esterno Classe contro altra classe interna
- 7. Implementare la classe astratta come classe locale? pro e contro
- 8. Quali sono le differenze tra la classe finale e la classe sigillata in Scala?
- 9. Come rappresentare la classe nidificata di C++ in UML?
- 10. Come istanziare la classe interna con la riflessione in Java?
- 11. Classe nidificata - chiamata della classe nidificata dalla classe genitore
- 12. Impossibile importare la classe interna statica?
- 13. La classe di importazione C# in un'altra classe non funziona
- 14. classe Annotate con classe interna
- 15. La semantica e la sintassi sono le stesse?
- 16. Come inizializzare un'istanza della classe interna se la classe interna è dichiarata nel metodo della classe esterna?
- 17. Come abilitare la classe locale PHP
- 18. Singleton vs una classe interna statica per la classe Helper database in Android
- 19. Classe Swift usando la classe Objective-C usando la classe Swift
- 20. Classe interna che accede alla classe esterna
- 21. pitone creare dinamicamente classe con classe interna
- 22. come usare la classe annidata in un'altra classe in java?
- 23. Classe nidificata .GetType()
- 24. Strange comportamento di constexpr per la classe interna
- 25. Mappa automapper in classe nidificata
- 26. Qual è lo scopo di FeedReaderContract e come definire la classe interna nella classe OpenHelper
- 27. C++ Inizializza la classe base 'const int nella classe derivata?
- 28. La classe interna ha un riferimento implicito alla classe esterna e può perdere memoria
- 29. PHP include la classe nell'altra classe
- 30. Come ereditare la classe interna del genitore in questo codice?
E non ci sono classi interne in C++. Questo è un concetto di Java. –