В това ръководство ще разгледаме оператор с двойно двоеточие (::). в C++ и как работи в различни сценарии.
Какво прави :: в C++?
В C++, резолюция на обхвата оператор (::) се използва за извличане на имената на променливите, присъстващи на различни нива на обхват. Обхватът в програмирането се отнася до контекста, където могат да бъдат достъпни променливи и функции.
Използване на :: в различни случаи в C++
В C++, оператор за разрешаване на обхват (::) има различни приложения в зависимост от контекста, в който се използва. Следват някои забележителни употреби на този оператор:
1: Достъп до променлива или функция в различно пространство от имена
А пространство от имена се използва в C++ за групиране на свързани функции, класове и променливи, за да се избегнат конфликти при именуване. Когато дефинирате променлива или функция в a пространство от имена , името на променливата или функцията се вижда само в него пространство от имена .
В C++ можете да използвате оператор за разрешаване на обхват (::) заедно с пространство от имена име и името на променливата или функцията за достъп до променлива или функция, дефинирана в различно пространство от имена. Това ви позволява да получите достъп до променливата или функцията от a пространство от имена различен от този, в който е създаден.
За да разберете горния случай, разгледайте следния код като пример:
#includeизползване на пространство от имена std ;
математика на пространството от имена {
конст двойно ПИ = 3,14159 ;
двойно квадрат ( двойно х ) {
връщане х * х ;
}
}
вътр основен ( ) {
cout << 'Стойността на PI е: ' << математика :: ПИ << endl ;
cout << 'Квадратът на 5 е: ' << математика :: квадрат ( 5 ) << endl ;
връщане 0 ;
}
Горният код използва математическо пространство от имена за достъп до „ПИ“ постоянно и 'квадрат' функция с помощта на оператор за разрешаване на обхват „::“ . След това отпечатва стойностите на конзолата.
Изход
2: Достъп до глобалната променлива в програмата
Когато едно и също име на локални и глобални променливи присъства в програмата, локалната променлива може да скрие глобалната. В такива ситуации можете да използвате оператор за разрешаване на обхват (::) за достъп до глобалната променлива. Този оператор ни позволява изрично да се позоваваме на глобалната променлива въз основа на нейния обхват.
Например в кода, даден по-долу, ние се позовахме на глобалната променлива „а „чрез оператор за разрешаване на обхват (::) , от вътрешността на функция, където е дефинирана локална променлива със същото име:
#includeизползване на пространство от имена std ;
вътр а = петнадесет ;
вътр основен ( )
{
вътр а = 35 ;
cout << 'Стойността на глобалната променлива a е ' << :: а << endl ;
cout << 'Стойността на локалната променлива a е ' << а << endl ;
връщане 0 ;
}
В горния код променливата a, присъстваща извън основната функция, е the глобална променлива и променливата a в основната функция е локална променлива със същото име като глобалната променлива. В командата cout сме използвали оператора за разрешаване на обхвата, за да отпечатаме глобалната променлива а .
Изход
3: Дефиниране на функция извън класа
В C++ можете да дефинирате функция на класа извън дефиницията на класа и това може да се направи с помощта на оператор за разрешаване на обхват (::) за да посочите към кой клас принадлежи функцията. Това е необходимо, защото функцията е дефинирана извън обхвата на класа.
Ето примерен код, който демонстрира това използване на оператор за разрешаване на обхват :
#includeизползване на пространство от имена std ;
клас myClass {
публичен :
невалиден моята функция ( ) ;
} ;
невалиден Моят клас :: моята функция ( ) {
cout << 'myfunction() Извикана!' ;
}
вътр основен ( )
{
myClass classObj ;
classObj. моята функция ( ) ;
връщане 0 ;
}
В горния код функцията член моята функция () се дефинира извън класа с помощта на оператор за разрешаване на обхват :: да уточня това моята функция () принадлежи към класа myClass.
Изход
4: Достъп до статични членове на класа
В C++, когато има статичен член и локална променлива със същото име присъства в класа, оператор за разрешаване на обхват (::) може да се използва за достъп до статични членове на клас. Това позволява на програмата да прави разлика между локалната променлива и статичния член.
Ето примерен код, който се отнася до използването на оператор за разрешаване на обхват за такъв случай:
#includeизползване на пространство от имена std ;
клас myClass {
публичен :
статичен вътр myStatVar ;
} ;
вътр Моят клас :: myStatVar = 5 ;
вътр основен ( ) {
вътр myStatVar = 10 ;
cout << 'Локална променлива myStatVar: ' << myStatVar << endl ;
cout << 'Променлива на класа myStatVar: ' << Моят клас :: myStatVar << endl ;
връщане 0 ;
}
Горната програма първо дефинира клас Моят клас със статична членска променлива myStatVar . След това дефинира локална променлива със същото име в основната функция на програмата. За достъп до променливата на класа, оператор за разрешаване на обхват (::) се използва с името на класа Моят клас . Програмата извежда стойността на двете променливи на конзолата.
Изход
5: Използвайте с множество наследявания
The оператор за разрешаване на обхват (::) се използва и за указване коя версия на член да се използва, когато C++ клас е извлечен от множество родителски класове, които имат членски променливи или функции с едно и също име. Можем да правим разлика между различни версии на един и същи член, като използваме оператор за разрешаване на обхват последвано от името на родителския клас и името на члена.
#includeизползване на пространство от имена std ;
клас Родител1 {
публичен :
невалиден печат ( ) {
cout << „Това е функция за печат на клас Parent1.“ << endl ;
}
} ;
клас Родител2 {
публичен :
невалиден печат ( ) {
cout << „Това е функция за печат на клас Parent2.“ << endl ;
}
} ;
клас myClass : публичен родител1 , публичен родител2 {
частен :
вътр никой ;
публичен :
Моят клас ( вътр н ) {
никой = н ;
}
невалиден печат ( ) {
Родител1 :: печат ( ) ; // извикване на функцията за печат на Parent1
Родител2 :: печат ( ) ; // извикване на функцията за печат на Parent2
cout << 'Стойността на num е: ' << никой << endl ; // отпечатване на стойността на num
}
} ;
вътр основен ( ) {
myClass obj ( 42 ) ; // създаване на обект на MyClass с num, инициализирано на 42
обект печат ( ) ; // извикване на функцията print() на обекта
връщане 0 ;
}
Горната програма демонстрира използването на оператор за разрешаване на обхват (::) за разграничаване на функциите за печат на Родител1 и Родител2 когато и двата класа са наследени от Моят клас. Чрез извикване на функциите с Родителски клас име, предхождащо името на функцията, можем да посочим коя версия на функцията да използваме.
Изход
Долен ред
The оператор за разрешаване на обхват (::) е жизненоважен компонент в C++, използван за достъп до имена на променливи в различни нива на обхват. Операторът има различни приложения, включително достъп до променлива или функция в различно пространство от имена, достъп до глобална променлива, дефиниране на функция извън класа, достъп до статични членове на клас и използване на множество наследявания. Въпреки че може да бъде объркващо за новите разработчици, разбирането на оператор за разрешаване на обхват (::) е от съществено значение за добрата програмна практика.