4. Бинарлы операторларды қайта анықтау
Класс ішінде анықталатын бинарлы функция-операторлар параметрлерсіз тұрақты емес әдістің көмегімен көрсетілуі керек, бұл кезде оны шақырған обьект бірінші операнд болып табылады:
Class monstr {
…
bool operator > (const monstr &M) {
If (health> M.health) return true;
Return false;
}
};
Егер функция класстан тыс анықталатын болса, ол класс типінің екі параметріне ие болу керек:
bool operator >(const monstr &M1,const monstr &M2) {
if(M1.get_health() > M2.get_health()) return true;
return false;
}
5. Меншіктеу операторларын қайта анықтау
Меншіктеу операторы жасырын түрде кез-келген класста элемент бойынша көшіру ретінде анықталған. Бұл операция әркез бір обьектіге екіншісінің мағынасын меншіктеген кезде шақырылады. Егер класста жады динамикалық түрде көрсетілетін жолдарға ие болса, онда меншіктеудің өзіндік операциясын анықтау керек. Меншіктеу семантикасын сақтап қалу үшін оператор-функция сілтемені ол шақырылған обьектіге қайтарып және параметр ретінде жалғыз ғана аргумент- меншіктелетін обьектіге сілтемені қабылдау керек.
const monstr& operator = (const monstr &M) {
/ / Өзіне меншіктеп алуды тексеру:
if (&M == this) return *this;
if (name) delete [ ] name;
if (M.name) {
name = new char [strlen(M.name) + 1];
strcpy(name, M.name); }
else name = 0;
health = M.health: ammo = M.ammo; skin =M.skin;
return *this;
}
Функциядан сілтегіштің обьектіге қайтуы меншіктеу операторының тізбегін жасайды:
monstr A(10), B, C;
C =B = A;
Меншіктеу операторын тек класс әдісі ретінде ғана анықтауға болады. Ол мұраға берілмейді.
Достарыңызбен бөлісу: |