214
Мұндай нұсқауышты функцияның параметрі ретінде беруге болады. Бұл
функцияға əдістің атауын беру мүмкіндігін жүзеге асырады:
void fun(int (monstr:: *pget)()){
(*this.*pget)(); // Функцияны .* операциясы
// арқылы шақыру
(this->*pget)(); // Функцияны ->* операциясы
// арқылы шақыру
}
Нұсқауышты нақты көрсетілген əдіске
адресті алу операциясының
көмегімен баптауға болады:
// Нұсқауышқа мəн меншіктеу:
pget = & monstr::get_health;
monstr Vasia, *p;
p = new monstr;
// Функцияны .* операциясы арқылы шақыру:
int Vasin_health = (Vasia.*pget)();
// Функцияны ->* операциясы арқылы шақыру:
int p_health = (p->*pget)();
Төменде нұсқауыштарды класс əдістеріне қолдану ережелері көрсетілген:
□ Əдіс нұсқауышына тек сəйкес тақырыбы бар əдістердің
адрестерін
меншіктеуге болады.
□ Кластың статикалық əдісіне нұсқауышты анықтауға болмайды.
□ Əдіске нұсқауышты класс элементі болып табылмайтын қарапайым
функция нұсқауышына түрлендіруге болмайды.
Қарапайым функцияларға нұсқауыштар сияқты əдістерге нұсқауыштар
атауы белгісіз əдістерді шақыру керек болған кезде қолданылады.
Бірақ оның
айнымалыға немесе қарапайым функцияға нұсқауыштан айырмашылығы –
əдістерге нұсқауыштар жадының белгілі бір адресіне сілтеме жасамайды. Ол
жиымдағы индекске көбірек ұқсайды, өйткені ығыстыру шамасын тағайындайды.
Компьютер жадындағы нақты көрсетілген адрес əдіске
нұсқауышты нақты
көрсетілген объектіге нұсқауышпен үйлестіру арқылы алынады.
ЕСКЕРТУ
Нұсқауыштар арқылы шақырылатын əдістер виртуалды болуы мүмкін. Мұндайда
нұсқауыш қолданылған объект типіне сəйкес келетін əдіс шақырылады.
Класс өрісіне нұсқауыштың форматы:
Достарыңызбен бөлісу: