Cтраница 2
Когда функция-элемент базового класса переопределяется в производном классе, функция производного класса обычно вызывает одноименную функцию базового и выполняет некоторую дополнительную работу. В случае, когда для вызова функции базового класса не используется операция разрешения области действия, возникает бесконечная рекурсия, так как функция-элемент производного класса фактически вызывает саму себя. [16]
Функции-элементы имеют внутри класса область действия функцию: переменные, определенные в функции-элементе, известны только этой функции. Если функция-элемент определяет переменную с тем же именем, что и переменная в области действия класс, последняя делается невидимой в области действия функция. Такая скрытая переменная может быть доступна посредством операции разрешения области действия с предшествующим этой операции именем класса. [17]
Элементы-функции имеют внутри класса область действия функции. Если в функции-элементе определена переменная с тем же именем, что и переменная с областью действия класса, то последняя будет скрыта переменной функции-элемента внутри области действия функции. Доступ к таким скрытым переменным можно получить посредством операции разрешения области действия, поместив перед этой операцией имя класса. [18]
Обратите внимание на использование двухместной операции разрешения области действия (::) в определении каждой из элементов-функций, следующих за определением класса на рис. 16.3. Сразу после определения класса и объявления его элементов-функций эти элементы-функции должны быть определены. Любая функция-элемент класса может быть определена непосредственно в его теле ( вместо включения туда ее прототипа) или же она может быть определена после тела класса. Поскольку различные классы могут иметь одинаковые имена элементов, операция разрешения области действия привязывает имя элемента к имени класса, однозначно идентифицируя функции-элементы данного класса. [19]
Производный класс может переопределить функцию-элемент базового класса. При описании в производном классе функции с тем же именем, версия функции производного класса переопределяет версию базового класса. Чтобы сделать доступной для производного класса версию функции базового класса, нужно использовать операцию разрешения области действия. [20]
![]() |
Примечание унарной операции разрешения области действия Распространенная ошибка программирования. [21] |
В С и C возможно объявление локальных и глобальных переменных с одним и тем же именем. В языке С, пока локальная переменная находится в области действия, все ссылки на имя этой переменной относятся к локальной переменной - глобальная переменная не видна в области действия локальной переменной. В языке C предусмотрена унарная операция разрешения области действия (::) для доступа к глобальной переменной, когда в области действия находится локальная переменная с тем же именем. Унарная операция разрешения области действия не может использоваться для доступа к переменной с этим же именем во внешнем блоке. К глобальной переменной можно обращаться непосредственно, без операции разрешения области действия, если имя глобальной переменной не совпадает с именем локальной переменной в области действия. В главе 16 мы обсудим применение двухместной операции разрешения области действия с классами. [22]
Хотя может показаться, что статические элементы данных подобны глобальным переменным, они имеют область действия класса. Статические элементы могут быть открытыми, закрытыми или защищенными. Статические элементы данных должны быть инициализированы в области действия файла. К закрытым и защищенным статическим элементам класса обращение должно происходить посредством открытых элементов-функций класса. Статические элементы класса существуют, даже если не существует ни одного объекта этого класса. Для обращения к открытому статическому элементу класса в случае, когда не существует ни одного объекта этого класса, просто поместите перед именем элемента имя класса с операцией разрешения области действия. [23]