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

       

Функции-члены


Пользователям, по-видимому, понадобится широкий набор операций над объектами типа Screen: возможность перемещать курсор, проверять и устанавливать области экрана и рассчитывать его реальные размеры во время выполнения, а также копировать один объект в другой. Все эти операции можно реализовать с помощью функций-членов.

Функции-члены класса объявляются в его теле. Это объявление выглядит точно так же, как объявление функции в области видимости пространства имен. (Напомним, что глобальная область видимости – это тоже область видимости пространства имен. Глобальные функции рассматривались в разделе 8.2, а пространства имен – в разделе 8.5.) Например:

class Screen {

public:

   void home();

   void move( int, int );

   char get();

   char get( int, int );

   void checkRange( int, int );

   // ...

};

Определение функции-члена также можно поместить внутрь тела класса:

class Screen {



public:

   // определения функций home() и get()

   void home() { _cursor = 0; }

   char get() { return _screen[_cursor]; }

   // ...

};

home() перемещает курсор в левый верхний угол экрана; get() возвращает символ, находящийся в текущей позиции курсора.

Функции-члены отличаются от обычных функций следующим:

  • функция-член объявлена в области видимости своего класса, следовательно, ее имя не видно за пределами этой области. К функции-члену можно обратиться с помощью одного из операторов доступа к членам – точки (.) или стрелки (->):
  • ptrScreen->home();

    myScreen.home();

    (в разделе 13.9 область видимости класса обсуждается более детально);

  • функции-члены имеют право доступа как к открытым, так и к закрытым членам класса, тогда как обычным функциям доступны лишь открытые. Конечно, функции-члены одного класса, как правило, не имеют доступа к данным-членам другого класса.
  • Функция-член может быть перегруженной (перегруженные функции рассматриваются в главе 9). Однако она способна перегружать лишь другую функцию-член своего класса. По отношению к функциям, объявленным в других классах или пространствах имен, функция-член находится в отдельной области видимости и, следовательно, не может перегружать их. Например, объявление get(int, int) перегружает лишь get() из того же класса Screen:

    class Screen {

    public:

       // объявления перегруженных функций-членов get()

       char get() { return _screen[_cursor]; }

       char get( int, int );

       // ...

    };

    (Подробнее мы остановимся на функциях-членах класса в разделе 13.3.)



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