V tomto návodu se podíváme na operátor dvojtečky (::). v C++ a jak to funguje v různých scénářích.
Co dělá :: v C++?
V C++ je rozlišení rozsahu operátor (::) se používá k načtení názvů proměnných přítomných na různých úrovních rozsahu. Rozsah v programování odkazuje na kontext, kde lze přistupovat k proměnným a funkcím.
Použití :: v různých případech v C++
V C++ je operátor rozlišení rozsahu (::) má různá použití v závislosti na kontextu, ve kterém se používá. Níže jsou uvedena některá pozoruhodná použití tohoto operátoru:
1: Přístup k proměnné nebo funkci v jiném jmenném prostoru
A jmenný prostor se používá v C++ k seskupování souvisejících funkcí, tříd a proměnných, aby se zabránilo konfliktům v názvech. Když definujete proměnnou nebo funkci v a jmenný prostor , název proměnné nebo funkce je viditelný pouze v něm jmenný prostor .
V C++ můžete použít operátor rozlišení rozsahu (::) spolu s jmenný prostor název a název proměnné nebo funkce pro přístup k proměnné nebo funkci definované v jiném jmenném prostoru. To vám umožní přístup k proměnné nebo funkci z a jmenný prostor jiný než ten, ve kterém byl vytvořen.
Chcete-li porozumět výše uvedenému případu, zvažte následující kód jako příklad:
#includepomocí jmenného prostoru std ;
matematika jmenného prostoru {
konst dvojnásobek PI = 3,14159 ;
dvojnásobek náměstí ( dvojnásobek X ) {
vrátit se X * X ;
}
}
int hlavní ( ) {
cout << 'Hodnota PI je:' << matematika :: PI << endl ;
cout << 'Čtverec 5 je:' << matematika :: náměstí ( 5 ) << endl ;
vrátit se 0 ;
}
Výše uvedený kód používá matematický jmenný prostor pro přístup k 'PI' konstantní a 'náměstí' funkce pomocí operátor rozlišení rozsahu „::“ . Poté vytiskne hodnoty do konzoly.
Výstup
2: Přístup ke globální proměnné v programu
Pokud je v programu přítomen stejný název lokální a globální proměnné, může lokální proměnná skrývat globální. V takových situacích můžete použít operátor rozlišení rozsahu (::) pro přístup ke globální proměnné. Tento operátor nám umožňuje explicitně odkazovat na globální proměnnou na základě jejího rozsahu.
Například v kódu uvedeném níže jsme odkazovali na globální proměnnou 'A ‘ přes operátor rozlišení rozsahu(::) , zevnitř funkce, kde byla definována lokální proměnná se stejným názvem:
#includepomocí jmenného prostoru std ;
int A = patnáct ;
int hlavní ( )
{
int A = 35 ;
cout << 'Hodnota globální proměnné a je' << :: A << endl ;
cout << 'Hodnota lokální proměnné a je' << A << endl ;
vrátit se 0 ;
}
Ve výše uvedeném kódu je proměnná a přítomná mimo hlavní funkci the globální proměnná a proměnná a v rámci hlavní funkce je lokální proměnná se stejným názvem jako globální proměnná. V příkazu cout jsme k tisku globální proměnné použili operátor rozlišení rozsahu A .
Výstup
3: Definujte funkci mimo třídu
V C++ můžete definovat funkci třídy mimo definici třídy a lze to provést pomocí operátor rozlišení rozsahu (::) určit, do které třídy funkce patří. To je nutné, protože funkce je definována mimo rozsah třídy.
Zde je příklad kódu, který demonstruje toto použití operátor rozlišení rozsahu :
#includepomocí jmenného prostoru std ;
třída myClass {
veřejnost :
prázdnota moje funkce ( ) ;
} ;
prázdnota moje třída :: moje funkce ( ) {
cout << 'myfunction() Called!' ;
}
int hlavní ( )
{
myClass classObj ;
classObj. moje funkce ( ) ;
vrátit se 0 ;
}
Ve výše uvedeném kódu členská funkce mojefunkce() je definován mimo třídu pomocí operátor rozlišení rozsahu :: abych to upřesnil mojefunkce() patří do třídy myClass.
Výstup
4: Přístup ke statickým členům třídy
Pokud v C++ existuje statický člen a v rámci třídy je přítomna lokální proměnná se stejným názvem, je to operátor rozlišení rozsahu (::) lze použít pro přístup ke statickým členům třídy. To umožňuje programu rozlišovat mezi lokální proměnnou a statickým členem.
Zde je příklad kódu, který souvisí s použitím operátor rozlišení rozsahu pro takový případ:
#includepomocí jmenného prostoru std ;
třída myClass {
veřejnost :
statický int myStatVar ;
} ;
int moje třída :: myStatVar = 5 ;
int hlavní ( ) {
int myStatVar = 10 ;
cout << 'Místní proměnná myStatVar: ' << myStatVar << endl ;
cout << 'Proměnná třídy myStatVar: ' << moje třída :: myStatVar << endl ;
vrátit se 0 ;
}
Výše uvedený program nejprve definuje třídu moje třída se statickou členskou proměnnou myStatVar . Potom definuje lokální proměnnou se stejným názvem uvnitř hlavní funkce programu. Chcete-li získat přístup k proměnné třídy, operátor rozlišení rozsahu (::) se používá s názvem třídy moje třída . Program vypíše hodnotu obou proměnných do konzole.
Výstup
5: Použití s vícenásobnou dědičností
The operátor rozlišení rozsahu (::) se také používá k označení verze člena, která se má použít, když je třída C++ odvozena z více nadřazených tříd, které mají členské proměnné nebo funkce se stejným názvem. Můžeme rozlišovat mezi různými verzemi stejného členu pomocí operátor rozlišení rozsahu následovaný názvem nadřazené třídy a jménem člena.
#includepomocí jmenného prostoru std ;
třída Rodič1 {
veřejnost :
prázdnota tisk ( ) {
cout << 'Toto je tisková funkce třídy Parent1.' << endl ;
}
} ;
třída Rodič2 {
veřejnost :
prázdnota tisk ( ) {
cout << 'Toto je tisková funkce třídy Parent2.' << endl ;
}
} ;
třída myClass : veřejný rodič1 , veřejný rodič2 {
soukromé :
int na jednom ;
veřejnost :
moje třída ( int n ) {
na jednom = n ;
}
prázdnota tisk ( ) {
Rodič1 :: tisk ( ) ; // volání funkce tisku Parent1
Rodič2 :: tisk ( ) ; // volání funkce tisku Parent2
cout << 'Hodnota num je: ' << na jednom << endl ; // vypíše hodnotu num
}
} ;
int hlavní ( ) {
myClass obj ( 42 ) ; // vytvořte objekt MyClass s num inicializovaným na 42
obj. tisk ( ) ; // volání funkce print() objektu
vrátit se 0 ;
}
Výše uvedený program demonstruje použití operátor rozlišení rozsahu (::) rozlišovat mezi tiskovými funkcemi Rodič1 a Rodič2 když obě třídy zdědí moje třída. Voláním funkcí pomocí Rodičovská třída název před názvem funkce, můžeme určit, jakou verzi funkce použít.
Výstup
Sečteno a podtrženo
The operátor rozlišení rozsahu (::) je životně důležitá součást v C++ používaná pro přístup k názvům proměnných na různých úrovních rozsahu. Operátor má různá použití, včetně přístupu k proměnné nebo funkci v jiném jmenném prostoru, přístupu ke globální proměnné, definování funkce mimo třídu, přístupu ke statickým členům třídy a použití vícenásobné dědičnosti. I když to může být pro nové vývojáře matoucí, pochopení operátor rozlišení rozsahu (::) je nezbytný pro správnou programátorskou praxi.