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.
E non ci sono classi interne in C++. Questo è un concetto di Java. –