3. Унарлы операторларды қайта анықтау
Класстың ішінде анықталатын унарлы функция-операторлар параметрлерсіз тұрақты емес әдістің көмегімен көрсетілуі керек, бұл кезде операнд болып оны шақырған обьект табылады, мысалы:
Class monstr {
…
monstr & operator ++() {++health: return *this}
};
monstr Vasia:
cout << (++Vasia).get_health():
Егер функция класстан тыс анықталатын болса, ол класс типінің бір параметріне ие болу керек:
Class monstr {
…
Friend monstr & operator ++(monstr &M):
}; r
monstr& operator ++(monstr &M) {++M.health: return M:}
Егер класс ішіндегі функцияны серіктестік ретінде сипаттамасақ, өзгертілетін жолдар қолжетімділігін ескеру қажет. Берілген жағдайда health жолы private спецификаторымен сипатталғандықтан сыртқа қолжетімсіз, сондықтан оны өзгерту үшін сәйкес әдісті қолдану қажет. сипаттауға monstr класының health жолының мағынасын өзгіртуге мүмкіндік беретін change_health әдісін енгіземіз:
void change_health(int he) { health =h: }
Сол кезде инкремент операторын кластан тыс сипатталған қарапайым функция көмегімен қайта анықтауға болады:
monstr& operator ++(monstr &M) {
int h = M.get_health(); h++
M.chenge_health(h);
return M;
}
Постфикстілі инкремент және декремент операторлары int типінің бірінші параметріне ие болу керек. Ол тек қана оларды префиксті түрден ажырату үшін қолданылады:
Class monstr{
…
monstr operator ++(int) {
monstr M(*this): health++
return M;
}
};
monstr Vasia;
cout << (Vasia++).get_health();
Достарыңызбен бөлісу: |