Sdílet prostřednictvím


Statické členy dat (C++)

Třídy mohou obsahovat statický člen data a funkce členů.Pokud je datový člen deklarován jako statické, pouze jednu kopii dat je zachována pro všechny objekty třídy.(Další informace naleznete v tématu Statické funkce členů.)

Členové statická data nejsou součástí objekty typu dané třídy; jsou samostatné objekty.Výsledkem prohlášení statický datový člen není považován za definici.Datový člen je deklarována v rozsahu třídy, ale definice se provádí v rozsahu souboru.Tyto statické členy mají externí propojení.To ukazuje následující příklad:

// 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()
{
}

V předcházejícím kódu členské bytecount je deklarována v třídě BufferedOutput, ale musí být definována mimo deklaraci třídy.

Statická data členů lze odkazovat bez odkazující na objekt typu třídy.Počet bajtů zapsaných pomocí BufferedOutput objekty lze získat takto:

long nBytes = BufferedOutput::bytecount;

Pro statický člen neexistuje není nutné, že neexistují žádné objekty typu třídy.Statické členy také přístupný pomocí výběru členů (. a – >) operátory.Příklad:

BufferedOutput Console;

long nBytes = Console.bytecount;

V předchozím případě odkaz na objekt (Console) nejsou hodnoceny; Vrácená hodnota je statický objekt bytecount.

Statická data členů se vztahují pravidla přístupu člen třídy, tak soukromý přístup pro členy statických dat je povolena pouze pro třídy členské funkce a přátelé.Tato pravidla jsou popsány v Řízení přístupu členských.Výjimkou je, že statická data, které členové musí být definovány v rozsahu souboru bez ohledu na jejich omezení přístupu.Pokud datový člen explicitně inicializovat, musí být uvedeny inicializátor s definicí.

Typ statický člen není kvalifikované pomocí názvu třídy.Proto typu BufferedOutput::bytecount je long.

Viz také

Referenční dokumentace

Třídy, struktury a odbory