Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Klassen kunnen statische lidgegevens en lidfuncties bevatten. Wanneer een gegevenslid wordt gedeclareerd als static, wordt slechts één kopie van de gegevens bewaard voor alle objecten van de klasse.
Statische gegevensleden maken geen deel uit van objecten van een bepaald klassetype. Als gevolg hiervan wordt de declaratie van een statisch gegevenslid niet beschouwd als een definitie. Het gegevenslid wordt gedeclareerd in klassebereik, maar de definitie wordt uitgevoerd in het bestandsbereik. Deze statische leden hebben externe koppeling. In het volgende voorbeeld ziet u dit:
// 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()
{
}
In de voorgaande code wordt het lid bytecount gedeclareerd in klasse BufferedOutput, maar moet het worden gedefinieerd buiten de klassedeclaratie.
Statische gegevensleden kunnen worden verwezen zonder te verwijzen naar een object van het klassetype. Het aantal geschreven bytes met behulp van BufferedOutput objecten kan als volgt worden verkregen:
long nBytes = BufferedOutput::bytecount;
Het statische lid bestaat alleen als er objecten van het klassetype bestaan. Statische leden kunnen ook worden geopend met behulp van de operatoren lidselectie (. en ->). Voorbeeld:
BufferedOutput Console;
long nBytes = Console.bytecount;
In het voorgaande geval wordt de verwijzing naar het object (Console) niet geëvalueerd. De geretourneerde waarde is dat van het statische object bytecount.
Statische gegevensleden zijn onderworpen aan toegangsregels voor klasleden, dus privétoegang tot statische gegevensleden is alleen toegestaan voor functies en vrienden van klasleden. Deze regels worden beschreven in Member-Access Control. De uitzondering hierop is dat statische gegevensleden moeten worden gedefinieerd in het bestandsbereik, ongeacht hun toegangsbeperkingen. Als het gegevenslid expliciet moet worden geïnitialiseerd, moet er een initialisatiefunctie worden opgegeven bij de definitie.
Het type statisch lid wordt niet gekwalificeerd door de klassenaam. Daarom is het type BufferedOutput::bytecount .long