Komponens és komponensfunkciók

Statikus osztálykomponensek

Amint azt már említettük, az újonnan létrehozott objektumnak saját alkotóeleme van. Annak biztosítására, hogy az osztály ezen összetevői egy példányban legyenek, és nem replikálódnak minden új osztályobjektum meghatározásakor, azokat az osztályban statikusnak kell nyilvánítani:

statikus type_name static_component_name;

Amint láthatja, a statikus adatösszetevő része az osztálynak, de nem tartozik ebbe az osztályba. Az osztály összes olyan objektumát, amelyben a statikus adatelemeket deklarálták, valamint a származtatott osztályok objektumai, most már osztoznak ezeknek a közös összetevőknek.

Statikus adatok class alkatrészek kerülnek a memóriában külön a nem-statikus komponens, és a statikus memóriával megjelent csak azután, hogy meghatározásokat az osztály definíciója.

A statikus összetevőadatok külső meghatározásához a következő konstrukciókat használhatja:

class_name az osztálynév. imya_staticheskogo_komponenta_dannyh;

class_name az osztálynév. static_database_name = inicializáló;

class_name az osztálynév. static_component_name (inicializáló);

Ezeket a konstrukciókat az osztálydefiníció után be kell helyezni a globális hatókörbe.

Osztály - absztrakt adattípus

Amint látja, a szokásos komponensadatoktól eltérően az osztály statikai összetevőit tovább kell definiálni az osztálydefiníción kívül. Megjegyezzük, hogy alapértelmezés szerint a beépített típus statikus adatösszetevőjének értéke 0 a megfelelő típusra konvertálva.

Emlékezzünk itt arra, hogy a fordítóegységben lévő osztály statikus komponensadatainak konstruktorait a fő () függvény meghívása előtt hívják meg, amellyel meghatározzák őket. A main () függvénnyel való kilépés után a destruktorok minden egyes ilyen objektumhoz sorrendben kerülnek felhívásra, ellentétben a konstruktorok hívására.

Tehát az adatmemória statikus összetevőjét csak az osztályon kívüli meghatározás után hozzák fel, és csak azután válik elérhetővé. A definíció után a statikus adatösszetevők a programban még azelőtt is meghatározhatók, hogy meghatározzák az adott osztály objektumait. Valójában egy statikus adatkomponens egyszerűen egy globális változó, amelynek hatóköre az osztályra korlátozódik, amelyben bejelentették. Az adategység statikus összetevőinek C ++ támogatásának fő pontja az, hogy jelenleg nincs szükség globális változók alkalmazására. Ennek során nem szabad megfeledkeznünk arról, hogy az osztályok és a globális változók együttes használata szinte mindig sérti a kapszulázás elvét. Megjegyezzük továbbá, hogy bizonyos esetekben az osztályban használják egyszerűen tevékenységi terület, amelyben a globális nevek kerülnek leple alatt a statikus elemek, így nem szennyezi a globális névteret.

A statikus adatokhoz való hozzáféréshez a következő nevek használatosak:

minősítés az objektum megnevezése nélkül

minősítés az objektum nevével

object_name .class_name. imya_staticheskogo_komponenta_dannyh

A statikus adatösszetevők elérésének másik módja az, hogy kifejezetten egy mutatót használ az osztályobjektumhoz:

vagy a tagválasztó operátor használatával ->

class_name_name_name -> static_component_name

vagy a dereferencing operátor * és a tagkiválasztó operátor segítségével.

A statikus összetevőfüggvény formátuma: statikus type_name static_component_name

Az objektumorientált programozás alapjai C ++ példákban

A statikus összetevő külső meghatározásának formátuma:

class_name az osztálynév. static_component_name (list_form_file_parameters) <тело_функции>

A statikus komponens funkció megőrzi a hagyományos (nem statikus) komponensfunkciók összes alapvető jellemzőjét, azaz Megközelíthető egy meglévő osztály objektum vagy mutató nevének felhasználásával egy ilyen objektumhoz.

Ezenkívül a statikus összetevő funkciót a minősítés használatával lehet nevezni anélkül, hogy megadná az objektum nevét:

class_name. static_component_name (call_arguments listája)

Ilyen képesítések statikus komponens funkciókat lehet nevezni, hogy meghatározzák a konkrét osztály tárgyak, mivel nem szükséges a hozzáférés a statikus adatokat alkatrészek ezeket a funkciókat, hogy azok okozták egy bizonyos osztálya objektumot.

Például, a következő definíciót Complex osztály bevezetésére két statikus osztály alkatrész - a részadattal számláló számlálására létre a program objektum osztály Complex (tervező végez megnő működését, valamint a destruktor - csökkentjük művelet) komponens és get_counterValue () függvényt. amely visszaadja a számlálóértéket:

// C ++ Absztrakt adattípus - komplex szám

#include névtér std; szerkezeti komplexum

// Alkatrészadatok - minden nyilvános (nyilvános) dupla re;

statikus int számláló;

Kapcsolódó cikkek