Что такое разрешение прицела?

Область видимости переменных должна быть разрешена в соответствии с тем, где они доступны

Разработчики часто хотят получить доступ к переменным с одинаковыми именами, но принадлежащими к разным областям действия. Если область указанной переменной не разрешена явно, компьютеры просто обращаются к самой внутренней переменной, как показано ниже:

 #include  с использованием пространства имен std; int x = 10; //Объявлена ​​глобальная переменная x int main () {int x = 8; //Объявлена ​​локальная переменная x cout  

В приведенном выше фрагменте основной функция обратилась к локальному экземпляру переменной x. Но что, если бы вместо этого мы хотели получить доступ к глобальному экземпляру? В этом случае может пригодиться оператор разрешения области видимости.

Оператор разрешения области видимости (: 🙂 определяет область идентификатора, на который имеется ссылка. Этот оператор имеет множество применений в C ++. Давайте посмотрим на некоторые из них.

1. Отличие глобальной переменной от локальной переменной с тем же именем
Как обсуждалось ранее, иногда мы хотим получить доступ к глобальной переменной рядом с локальной переменной с тем же именем. Использование оператора разрешения в приведенном ниже коде иллюстрирует простое решение.

 #include  с использованием пространства имен std; int x = 10; //Объявлена ​​глобальная переменная x int main () {int x = 8; //Объявлена ​​локальная переменная x//Доступ к глобальной переменной x с помощью :: cout  

Обратите внимание, что в приведенном выше примере :: используется как унарный оператор. В следующих примерах мы увидим, как его можно использовать и как бинарный оператор.

2. Определение функции вне класса, которому она принадлежит
Оператор разрешения области также позволяет нам определять функцию вне класса, который она объявлена. Это показано ниже.

 #include  с использованием пространства имен std; class Car {public: void honk (); //Функция, объявленная внутри класса}; void Car :: honk () {//Функция, определенная вне класса с помощью :: cout  

3. Различение идентификаторов, происходящих от разных классов-предков
Множественное наследование иногда может приводить к неоднозначности, если несколько классов-предков содержат переменные с одинаковыми именами. Разрешение прицела тоже может решить эту проблему.

 #include  с использованием пространства имен std; class Mother {protected: int age;  public: Mother () {//Определенный конструктором age = 32;  }}; class Father {protected: int age;  public: Father () {//Конструктор определен age = 34;  }}; class Child: public Mother, public Father {//Множественное наследование public: string name;  Child (string name)//Конструктор определен {this-> name = name;  } void print_parent_ages () {//Использование :: для доступа к переменным возраста обоих родительских классов cout  

4. Доступ к классу, вложенному внутри другого
«::» также может помочь нам получить доступ к классам, вложенным внутри других классов, как показано ниже:

 #include  using namespace std; class Outer_class {public: int x  ;  Outer_class () {//Внешний конструктор определил this-> x = 7;  } class Inner_class {//Объявление класса внутри другого public: int x;  Inner_class () {//Внутренний конструктор определил this-> x = 8;  }};  };  int main () {Внешний_класс внешний; //Использование :: для доступа к внутреннему классу из внешнего класса Outer_class :: Inner_class inner;  cout  

5. Доступ к статическим переменным класса
Оператор разрешения двоичной области видимости также может использоваться для определения и последующего доступа к статическим переменным класса, как показано ниже:

 #include  с использованием пространства имен std; class Person {  public: static int x;}; int Person :: x = 4; //Статическая переменная человека, определенная с помощью :: int main () {int x = 14; //Определена локальная переменная//Статическая переменная человека, определенная с помощью :: cout  

Оцените статью
nanomode.ru
Добавить комментарий