Точка, стрелка и двойное двоеточие при программировании классов и объектов в С++

В С++ есть такое понятие как область видимости класса. Вообще в С++ есть понятие областей видимости и вот среди них одна из областей видимости — это область видимости класса.

  • Локальная область видимости — видимость только внутри блока
  • Глобальная область видимости — видимость на уровне файла
  • Область видимости класса — видимость только внутри класса, но не за его пределами
Область видимости класса применима к именам, определенным в классе, таким как имена данных-членов и функций-членов класса. Существование такой области видимости позволяет удобно использовать одни и те же названия для функций или переменных внутри разных классов.

Вне класса и вне функций класса для доступа к элементам, сокрытым областью видимости класса, в зависимости от ситуации применяют операции:

Прямая операция членства
Косвенная операция членства
Операция разрешения контекста

.
->
::

Какая из операций используется зависит от контекста, в котором используется название класса. Самый простой и понятный вариант — использование операции "точка". Используем объект и с помощью точки делаем запрос на какую-то часть класса, будь то функция или переменная, открытая классом.

Использование точки обычно самый привычный способ (для тех, кто не переходил с каких-то специфических кодов), поэтому, как правило, вопросов с точкой не возникает: есть объект и его возможности задействования с помощью запроса через точку.
Чуть сложнее дело обстоит со стрелкой. Сколько бы лет ни прошло, всегда будут новички, которым стрелка окажется неясной. Конечно, если объяснить, то всё ясно, но как-то так вышло, что сначала люди не понимают указатели, потом не понимают операцию ->. Эта операция выполняет ту же роль, что точка, но предназначена для облегчения восприятия кода. Когда используются указатели, хочешь или не хочешь, но в С++ код становится сложным для восприятия, и этот момент в случае с объектами был немного упрощён:

Если внутренний для класса элемент указатель, а объект класса не является указателем, то обычно используется точка:

В общем, стрелка обычно используется, если на объект указывает указатель, а точка если объект сам по себе.
Операция двойного двоеточия называется операцией разрешения области видимости не просто так. Прежде всего двойное двоеточие является уточнением. Фактически двойное двоеточие расширяет область видимости компилятору для поиска названий. Если говорить о классах, то такую использовать можно для выносимых за класс данных класса. Это помогает избежать неоднозначности в случае использования нескольких классов, внутри которых могут оказаться одни и те же названия. Двойным двоеточием уточняется принадлежность элемента к классу и компилятор не затруднён в выборе правильного класса. Кроме этого, в классе двойное двоеточие может применяться к статической переменной класса. По большому счёту статическая переменная класса является глобальной переменной, но прикрытой областью видимости класса. Поскольку статическая переменная класса глобальная, ей не имеет значения, построен объект или не построен и она не зависит от объектов класса. Если обычные переменные внутри класса могут использоваться как независимые переменные независимыми объектами такого класса, то статическая переменная класса привязана ко всем объектам класса.

Статическую переменную класса надо определять вне функций, это как с глобальными, ибо она глобальная. Т. е. локально внутри какой-то функции нельзя инициализировать значением статическую переменную класса. А если мы такую не инициализируем, то ёё как бы не будет существовать, то, что она объявлена внутри класса, не порождает её саму. Но суть темы иная. Суть темы в том, что если что-то сокрыто областью видимости, то иногда можно немножко приоткрыть заслонки, чтобы обращаться к сокрытому, как в примере со тсатической переменной класса. В зависимости от ситуации может потребоваться любой из показанных трёх вариантов.
  • Статическая переменная одна на все объекты класса.


И как упоминалось ранее (а многим новичкам уже не первый день знакомо), операция двойного двоеточия уточняет принадлежность некоторых функций к классам:

Просто запомните, что где операция двойного двоеточия, там скорее всего уточняют область видимости. Эта операция не ограничивается классами и как бы независима от классов. Т. е. она происходит не из возможностей классов, а из другой области. Просто её достаточно удобно применять в некоторых случаях к элементам классов.

3 комментария на «“Точка, стрелка и двойное двоеточие при программировании классов и объектов в С++”»

  1. Сергей:

    Хорошая статья, спасибо!
    Но вот такая конструкция встретилась:

    Где осталось не понятным применение двоеточия перед вызовом функций в двух последних строках. Была в кодах
    С++ при использовании библиотеки Qt3 под FreeBSD.

  2. Сергей:

    Этот пример можно не объяснять.
    Ответ нашелся: функция SetShow(bool On) принадлежит текущему классу, а SetShow(pbShowInList, On) есть глобальная функция, то есть совсем другая и описана где-то вне этого класса. А чтобы вызвать эту глобальную функцию и ставятся два двоеточия перед ее именем.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/d-m-zlatopolskiy/programmirovanie-tipovye-zadachi-algoritmy-metody-6509134/?lfrom=15589587
Яндекс.Метрика