Condividi tramite


Membri dati statici (C++)

Le classi possono contenere i dati dei membri statici e le funzioni membro.Quando un membro dati è dichiarata come statico, una sola copia dei dati viene gestito per tutti gli oggetti della classe.(Per ulteriori informazioni, vedere Funzioni membro static).

I membri dati statici non fanno parte degli oggetti di un tipo specifico della classe, sono oggetti distinti.Di conseguenza, la dichiarazione di un membro dati statici non è considerata una definizione.Il membro dati è dichiarato nell'ambito della classe, ma la definizione viene eseguita in ambito file.questi membri statici hanno collegamento esterno.Questa condizione è illustrata nell'esempio che segue.

// static_data_members.cpp
class BufferedOutput
{
public:
   // Return number of bytes written by any object of this class.
   short BytesWritten()
   {
      return bytecount;
   }

   // Reset the counter.
   static void ResetCount()
   {
      bytecount = 0;
   }

   // Static member declaration.
   static long bytecount;
};

// Define bytecount in file scope.
long BufferedOutput::bytecount;

int main()
{
}

Nel codice precedente, il membro bytecount viene dichiarato nella classe BufferedOutput, ma deve essere definita all'esterno della dichiarazione di classe.

I membri dati statici possono fare riferimento a senza fare riferimento a un oggetto di tipo classe.Il numero di byte scritti mediante BufferedOutput gli oggetti possono essere ottenuti come segue:

long nBytes = BufferedOutput::bytecount;

Affinché il membro statico non esiste, non è necessario che tutti gli oggetti di tipo classe esistono.I membri statici possono anche possibile accedervi utilizzando la selezione dei membri (. e - >) operatori.Di seguito è riportato un esempio:

BufferedOutput Console;

long nBytes = Console.bytecount;

Nel caso precedente, il riferimento all'oggetto (Consolenon viene valutato; il valore restituito è quello dell'oggetto statico bytecount.

I membri dati statici sono soggetti alle regole di accesso al membro di classe, pertanto accesso privato dei membri dati statici è supportato solo per le funzioni e friend del membro della classe.Queste regole sono descritte in Controllo di accesso al membro.L'eccezione è che i membri dati statici devono essere definiti in ambito file indipendentemente dalle restrizioni di accesso.Se il membro dati sia possibile inizializzare in modo esplicito, un inizializzatore deve essere fornito della definizione.

Il tipo di membro statico non è qualificato con il nome della classe.di conseguenza, il tipo di BufferedOutput::bytecount viene long.

Vedere anche

Riferimenti

Classi, strutture e unioni