Statické členy (C++)
Třídy mohou obsahovat statická data členů a členské funkce. Pokud je datový člen deklarován jako static
, je zachována pouze jedna kopie dat pro všechny objekty třídy.
Statické datové členy nejsou součástí objektů daného typu třídy. V důsledku toho se deklarace statického datového členu nepovažuje za definici. Datový člen je deklarován v oboru třídy, ale definice se provádí v oboru souboru. Tito statická členové mají externí propojení. Ilustruje to 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ředchozím kódu je člen bytecount
deklarován ve třídě BufferedOutput
, ale musí být definován mimo deklaraci třídy.
Statické datové členy lze odkazovat bez odkazování na objekt typu třídy. Počet bajtů zapsaných pomocí BufferedOutput
objektů lze získat následujícím způsobem:
long nBytes = BufferedOutput::bytecount;
Aby statický člen existoval, není nutné, aby existovaly žádné objekty typu třídy. Ke statickým členům lze přistupovat také pomocí operátorů výběru členů (. a ->). Příklad:
BufferedOutput Console;
long nBytes = Console.bytecount;
V předchozím případě není vyhodnocen odkaz na objekt (Console
) ; vrácená hodnota je hodnota statického objektu bytecount
.
Statické datové členy podléhají pravidlům přístupu členů třídy, takže soukromý přístup ke statickým datovým členům je povolený jenom pro funkce členů třídy a přátele. Tato pravidla jsou popsána v řízení přístupu člena. Výjimkou je, že statické datové členy musí být definovány v oboru souborů bez ohledu na jejich omezení přístupu. Pokud má být datový člen explicitně inicializován, musí být s definicí uveden inicializátor.
Typ statického členu není kvalifikovaný názvem třídy. Proto je typ BufferedOutput::bytecount
long
.
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro