2011-10-24 18 views

risposta

5

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.

+1

E non ci sono classi interne in C++. Questo è un concetto di Java. –

2

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++.

0

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.

Problemi correlati