Программирование на языке высокого уровня. Марапулец Ю.В. - 84 стр.

UptoLike

Составители: 

Ниже перечислены правила использования указателей на методы классов.
Указателю на метод можно присваивать только адреса методов, имеющих соответст-
вующий заголовок.
Нельзя определить указатель на статический метод класса.
Нельзя преобразовать указатель на метод в указатель на обычную функцию, не яв-
ляющуюся элементом класса.
Как и указатели на обычные функции, указатели на методы используются в том
случае, когда возникает необходимость вызвать метод, имя которого неизвестно. Однако
в отличие указателя на переменную или обычную функцию, указатель на метод не ссы-
лается на определенный адрес памяти. Он больше похож на индекс в массиве, поскольку
задает смещение. Конкретный адрес в памяти получается путем сочетания указателя на
метод с указателем на определенный объект. Формат указателя на поле класса:
тип_данных(имя_класса::*имя_указателя);
В определение указателя можно включить его инициализацию в форме:
&имя_класса::*имя_поля; // Поле должно быть public
Следует обратить внимание на то, что указатели на поля классов не являются
обычными указателямиведь при присваивании им значений они не ссылаются на
конкретный адрес памяти, поскольку память выделяется не под классы, а под объек-
ты классов.
Можно создать
константный объект, значения полей которого изменять запре-
щается. К нему должны применяться только
константные методы. Пример:
class X
{
...
int get_boy() const {return boy;}
};
const X Dn(0, 0): // Константный объект
cout << Dn.get_boy();
Свойства константного метода:
объявляется с ключевым словом const после списка параметров;
не может изменять значения полей класса;
может вызывать только константные методы;
может вызываться для любых (не только константных) объектов.
Рекомендуется описывать как константные те методы, которые предназначены для
получения значений полей.
Классы могут быть
глобальными (объявленными вне любого блока) и локальными
(объявленными внутри блока, например, функции или другого класса). Рассмотрим не-
которые особенности локального класса:
внутри локального класса можно использовать типы, статические (static) и внеш-
ние (extern) переменные, внешние функции и элементы перечислений из области,
в которой он описан; запрещается использовать автоматические переменные из
этой области;
локальный класс не может иметь статических элементов;
84
      Ниже перечислены правила использования указателей на методы классов.
• Указателю на метод можно присваивать только адреса методов, имеющих соответст-
    вующий заголовок.
• Нельзя определить указатель на статический метод класса.
• Нельзя преобразовать указатель на метод в указатель на обычную функцию, не яв-
    ляющуюся элементом класса.
      Как и указатели на обычные функции, указатели на методы используются в том
случае, когда возникает необходимость вызвать метод, имя которого неизвестно. Однако
в отличие указателя на переменную или обычную функцию, указатель на метод не ссы-
лается на определенный адрес памяти. Он больше похож на индекс в массиве, поскольку
задает смещение. Конкретный адрес в памяти получается путем сочетания указателя на
метод с указателем на определенный объект. Формат указателя на поле класса:

тип_данных(имя_класса::*имя_указателя);

В определение указателя можно включить его инициализацию в форме:

&имя_класса::*имя_поля; // Поле должно быть public

     Следует обратить внимание на то, что указатели на поля классов не являются
обычными указателями – ведь при присваивании им значений они не ссылаются на
конкретный адрес памяти, поскольку память выделяется не под классы, а под объек-
ты классов.
     Можно создать константный объект, значения полей которого изменять запре-
щается. К нему должны применяться только константные методы. Пример:

class X
{
      ...
      int get_boy() const {return boy;}
};

const X Dn(0, 0): // Константный объект
cout << Dn.get_boy();

     Свойства константного метода:
• объявляется с ключевым словом const после списка параметров;
• не может изменять значения полей класса;
• может вызывать только константные методы;
• может вызываться для любых (не только константных) объектов.
     Рекомендуется описывать как константные те методы, которые предназначены для
получения значений полей.
     Классы могут быть глобальными (объявленными вне любого блока) и локальными
(объявленными внутри блока, например, функции или другого класса). Рассмотрим не-
которые особенности локального класса:
• внутри локального класса можно использовать типы, статические (static) и внеш-
   ние (extern) переменные, внешние функции и элементы перечислений из области,
   в которой он описан; запрещается использовать автоматические переменные из
   этой области;
• локальный класс не может иметь статических элементов;


                                          84