static c
Důležitost a použití statiky v C ++ s příklady.
V našich předchozích tématech o třídách úložiště nám bylo představeno slovo statické. Dozvěděli jsme se o statických proměnných deklarovaných v programu C ++. Víme, že statické proměnné jsou inicializovány pouze jednou a zachovávají si hodnotu v celém programu.
Podobně jako statické proměnné v tomto kurzu rozšíříme použití statického klíčového slova na:
jaká je vhodná maska podsítě pro síť mezi dvěma hostiteli
- Statické členské proměnné ve třídě
- Statické objekty třídy
- Třída statických metod
=> Podívejte se na výukové návody do hloubky C ++ zde.
Co se naučíte:
- Statické proměnné členů ve třídě A.
- Statické objekty třídy
- Statické metody ve třídě A.
- Účel statických funkcí
- Závěr
- Doporučené čtení
Statické proměnné členů ve třídě A.
Statická proměnná se na zásobníku nikdy nepřiděluje. Je jim přiděleno místo na jiném statickém úložišti. To znamená, že když deklarujeme statickou proměnnou ve třídě, je tato proměnná sdílena všemi objekty dané třídy.
Protože statické proměnné jsou inicializovány pouze jednou a jsou sdíleny všemi objekty třídy, statické proměnné nejsou nikdy inicializovány konstruktorem. Místo toho by měla být statická proměnná explicitně inicializována mimo třídu pouze jednou pomocí operátoru rozlišení oboru (: :).
Když je vytvořen první objekt, všechna statická data primitivního typu se inicializují na nulu, pokud není k dispozici žádná další inicializace.
Zkontrolujte následující příklad, který ukazuje statickou proměnnou ve třídě.
Jak je znázorněno v následujícím kódu, máme počet statických proměnných jako člen ukázky třídy. Všimněte si, že jsme tuto proměnnou inicializovali explicitně mimo třídu s počáteční hodnotou = 0;
Potom tuto statickou proměnnou zvýšíme v konstruktoru třídy.
Podívejme se na ukázkový program.
#include #include using namespace std; class sample{ int var; static int count; public: sample(int var):var(var){ cout<<'Count = '< Výstup:
Počet = 0
Počet = 1
Počet = 2
V hlavní funkci vytvoříme tři různé objekty. Na výstupu vidíme, že hodnota statické proměnné je udržována mezi vytvořením objektu a není resetována při každém vytvoření objektu. To pro první objekt, count = 0. Potom se zvýší na 1. U dalšího objektu count = 1 a tak dále.
Pokud by to byla nějaká běžná proměnná, pak by výstup byl:
Počet = 0
Počet = 0
Počet = 0
Statické objekty třídy
Stejně jako statické členské proměnné třídy můžeme objekty třídy deklarovat jako statické. Objekty statické třídy jsou také inicializovány pouze jednou a zůstávají aktivní v celém programu. Protože objekt je uživatelem definovaný typ, je objekt statické třídy inicializován podobně jako běžné objekty pomocí konstruktoru.
Vezměme si příklad programování, abychom lépe porozuměli statickým objektům třídy.
#include using namespace std; class xyz { int i; public: xyz() { i=0; cout << 'Constructor::xyz'<V tomto programu máme třídu xyz s konstruktorem a destruktorem. V hlavní funkci deklarujeme proměnnou x = 0; Pokud je x rovno nule, vytvoříme statický objekt třídy xyz.
Program poskytuje následující výstup.
Výstup:
co jsou metadata v datovém skladu
Konstruktor :: xyz
Konec hlavní
Destruktor :: xyz
Normálně měl být výstup
Konstruktor :: xyz
Destruktor :: xyz
Konec hlavní
Ale když vytváříme statický objekt, tento objekt má rozsah až do konce programu a ne, když objekt vyjde z rozsahu (konec příkazu if). To je důvod, pro který se destruktor pro objekt obj provede až po dosažení konce hlavní funkce.
Statické metody ve třídě A.
Ve třídě můžeme mít také statické metody. Stejně jako statické objekty a statické členské proměnné mají statické členské funkce také rozsah, dokud neskončí provádění programu.
Když je metoda třídy deklarována jako statická, má přístup pouze ke statickým členům, tj. Statickým proměnným a statickým funkcím třídy. Nemá přístup k běžným členům třídy.
Pro metody statické třídy také není k dispozici žádný „tento“ ukazatel.
Máme povoleno používat objekt a operátor tečky pro přístup ke statickým metodám třídy, ale pro přístup k těmto metodám se doporučuje používat název třídy a operátor rozlišení oboru.
Níže je uveden příklad použití statické metody ve třídě.
V tomto příkladu jsme definovali dvě statické členské proměnné A a B a statickou metodu printValues. Proměnné A a B jsou inicializovány na hodnoty 10, respektive 20. Ve statické metodě printValues hodnoty A a B procházejí po přírůstku, respektive před přírůstkem. Poté se hodnoty vytisknou.
V hlavní metodě přímo voláme statickou metodu printValues pomocí názvu třídy, protože k vyvolání statických funkcí nepotřebujeme žádný objekt.
#include using namespace std; class Sample { static int A; static int B; public: static void printValues(){ A++; ++B; cout <<'Value of A: ' << A << endl; cout <<'Value of B: ' << B << endl; } }; int Sample :: A =10; int Sample :: B =20; int main(){ Sample::printValues(); return 0; }
Výstup:
Hodnota A: 11
Hodnota B: 21
Screenshot stejného výstupu je uveden níže.
Takže ve výstupu vidíme, že hodnoty obou statických proměnných se mění podle operací prováděných s nimi.
Účel statických funkcí
Poté, co jsme v tomto kurzu viděli různá použití klíčového slova static, zůstává otázka, jaký je účel statických funkcí.
Účel statických funkcí lze shrnout níže:
- Používáme statické funkce, když tato funkce nezávisí na objektu pro vyvolání a práci.
- Ještě dalším účelem použití statické funkce je omezit její použití. Na rozdíl od globálních funkcí je přístup ke statickým funkcím omezen na soubor, do kterého jsou umístěny. Abychom tedy omezili přístup k funkcím, uděláme to statické.
- Kromě výše uvedených dvou důvodů používáme statické funkce, když nechceme vytvořit objekt třídy pouze k provedení funkce, která neodkazuje na žádné členy třídy.
Závěr
Na závěr tohoto tématu můžeme říci, že statické klíčové slovo v C ++ lze použít různými způsoby k deklaraci proměnných, členských proměnných, objektů třídy, metod atd.
Statické členské funkce a proměnné nemusí být přístupné s objektem, spíše k nim lze přímo přistupovat pomocí názvu třídy. Rozsah statických entit také zůstává po celou dobu provádění programu. Proto statické klíčové slovo lze také použít k řízení přístupu konkrétní entity.
V našich připravovaných tutoriálech se dozvíme více o několika dalších tématech OOP v C ++.
=> Podívejte se sem a podívejte se zde na A-Z výukových kurzů C ++.
Doporučené čtení
- Mocking soukromé, statické a neplatné metody pomocí Mockito
- Statické testování a dynamické testování - rozdíl mezi těmito dvěma důležitými testovacími technikami
- TOP 40 nástrojů pro statickou analýzu kódu (nejlepší nástroje pro analýzu zdrojového kódu)
- Nejlepší ZDARMA C # Tutorial Series: The Ultimate C # Guide For Beginners
- Parametrizace statických hodnot v LoadRunneru
- Proměnné Pythonu
- Typy dědičnosti v C ++
- Proměnné v C ++