Указатель this Конструкторы Конструктор копирования Статические элементы класса Статические поля


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



Download 153 Kb.
bet10/11
Sana02.03.2022
Hajmi153 Kb.
#478803
TuriУказатель
1   2   3   4   5   6   7   8   9   10   11
Bog'liq
5-Лекция-Классы

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


Можно определить функции-операции, которые будут осуществлять преобразование класса к другому типу. Формат:
operator имя_нового_типа ();
Тип возвращаемого значения и параметры указывать не требуется. Можно определять виртуальные функции преобразования типа.
Пример:
monster::operator int(){return health;}
...
monster Vasia; cout << int(Vasia);

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


К элементам классов можно обращаться с помощью указателей. Для этого определены операции .* и ->*. Указатели на поля и методы класса определяются по-разному.
Формат указателя на метод класса:
возвр_тип (имя_класса::*имя_указателя)(параметры);
Например, описание указателя на метод класса 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)(); // Вызов функции через операцию ->*

  • Указателю на метод можно присваивать только адреса методов, имеющих соответствующий заголовок.

  • Нельзя определять указатель на статический метод класса.

  • Нельзя преобразовывать указатель на метод в указатель на обычную функцию, не являющуюся элементом класса.

Как и указатели на обычные функции, указатели на методы используются в том случае, когда возникает необходимость вызвать метод, имя которого неизвестно. Однако в отличие указателя на переменную или обычную функцию, указатель на метод не ссылается на определенный адрес памяти. Он больше похож на индекс в массиве, поскольку задает смещение. Конкретный адрес в памяти получается путем сочетания указателя на метод с указателем на определенный объект.
ПРИМЕЧАНИЕ
Методы, вызываемые через указатели, могут быть виртуальными. При этом вызывается метод, соответствующий типу объекта, к которому применялся указатель.
Формат указателя на поле класса:
тип_данных(имя_класса::*имя_указателя);
В определение указателя можно включить его инициализацию в форме:
&имя_класса::*имя_поля; // Поле должно быть public
Если бы поле health было объявлено как public, определение указателя на него имело бы вид:
int (monster::*phealth) = &monster::health;
cout << Vasia.*phealth; // Обращение через операцию .*
cout << p->*phealth; // Обращение через операцию ->*
Обратите внимание на то, что указатели на поля классов не являются обычными указателями - ведь при присваивании им значений они не ссылаются на конкретный адрес памяти, поскольку память выделяется не под классы, а под объекты классов.

Download 153 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10   11




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish