С++ для начинающих

       

Доступ к членам класса


Говорят, что определение функции-члена принадлежит области видимости класса независимо от того, находится ли оно вне или внутри его тела. Отсюда следуют два вывода:

  • в определении функции-члена могут быть обращения к любым членам класса, открытым или закрытым, и это не нарушает ограничений доступа;
  • когда функция-член обращается к членам класса, операторы доступа “точка” и “стрелка” не необходимы.
  • Например:

    #include <string>

    void Screen::copy( const Screen &sobj )

    {

       // если этот объект и объект sobj - одно и то же,

       // копирование излишне

       // мы анализируем указатель this (см. раздел 13.4)

       if ( this != &sobj )

       {

          _height = sobj._height;



          _width = sobj._width;

          _cursor = 0;

          // создаем новую строку;

          // ее содержимое такое же, как sobj._screen

          _screen = sobj._screen;

       }

    }

    Хотя _screen, _height, _width и _cursor являются закрытыми членами класса Screen, функция-член copy() работает с ними напрямую. Если при обращении к члену отсутствует оператор доступа, то считается, что речь идет о члене того класса, для которого функция-член вызвана. Если вызвать copy() следующим образом:

    #include "Screen.h"

    int main()

    {

       Screen s1;

       // Установить s1

       Screen s2;

       s2.copy(s1);

       // ...

    }

    то параметр sobj внутри определения copy() соотносится с объектом s1 из функции main(). Функция-член copy() вызвана для объекта s2, стоящего перед оператором “точка”. Для такого вызова члены _screen, _height, _width и _cursor, при обращении к которым внутри определения этой функции нет оператора доступа, – это члены объекта s2. В следующем разделе мы рассмотрим доступ к членам класса внутри определения функции-члена более подробно и, в частности, покажем, как для поддержки такого доступа применяется указатель this.



    Содержание раздела