Перегрузка операции приведения типа

Можно определить функции-операции, которые будут осуществлять преобразование класса к другому типу. Формат:

operator имя_нового_типа ();

Тип возвращаемого значения и параметры указывать не требуется. Можно определять виртуальные функции преобразования типа.

Пример:

monster::operator int(){return health;}...monster Vasia; cout << int(Vasia);

on_load_lecture();

   

Указатели на элементы классов

К элементам классов можно обращаться с помощью указателей. Для этого определены операции.* и ->*. Указатели на поля и методы класса определяются по-разному.

Формат указателя на метод класса:

возвр_тип (имя_класса::*имя_указателя)(параметры);

Например, описание указателя на метод класса monster

int get_health() const {return health;}

будет иметь вид:

int (monster:: *pget)();

Такой указатель можно задавать в качестве параметра функции. Это дает возможность передавать в функцию имя метода:

void fun(int (monster:: *pget)()){(*this.*pget)(); // Вызов функции через операцию.*(this->*pget)(); // Вызов функции через операцию ->*}

Можно настроить указатель на конкретный метод с помощью операции взятия адреса:

pget = & monster::get_health;// Присваивание значения указателюmonster Vasia, *p;p = new monster;int Vasin_health = (Vasia.*pget)();//Вызов функции через операцию.*int p_health = (p->*pget)(); // Вызов функции через операцию ->*
  • Указателю на метод можно присваивать только адреса методов, имеющих соответствующий заголовок.
  • Нельзя определять указатель на статический метод класса.
  • Нельзя преобразовывать указатель на метод в указатель на обычную функцию, не являющуюся элементом класса.

Как и указатели на обычные функции, указатели на методы используются в том случае, когда возникает необходимость вызвать метод, имя которого неизвестно. Однако в отличие указателя на переменную или обычную функцию, указатель на метод не ссылается на определенный адрес памяти. Он больше похож на индекс в массиве, поскольку задает смещение. Конкретный адрес в памяти получается путем сочетания указателя на метод с указателем на определенный объект.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: