prefix increment operator (tsz. prefix increment operators)
++obj
műveletet újradefiniáljuk saját osztályaink számára. Ez akkor hasznos, ha olyan objektumokat hozunk létre, amelyeket számlálószerűen vagy iterátorszerűen szeretnénk használni.
++
?++obj
→ először növeli, aztán használja.obj++
→ először használja, aztán növeli.Ebben a válaszban a prefix verzió-ról van szó.
++
túlterheléseClassName& operator++() {
// először növel, majd visszatér magára
// (prefix viselkedés)
return *this;
}
#include <iostream>
class Szamlalo {
int ertek;
public:
Szamlalo(int kezdo = 0): ertek(kezdo) {}
Szamlalo& operator++() {
++ertek;
return *this;
}
void kiir() const {
std::cout << "Érték: " << ertek << std::endl;
}
};
int main() {
Szamlalo sz;
++sz; // növel
sz.kiir(); // Érték: 1
(++sz).kiir(); // Érték: 2
}
Prefix (++x )
|
Postfix (x++ )
|
---|---|
operator++()
|
operator++(int) — az int csak dummy
|
Először növel, aztán visszatér | Először visszatér másolatként, aztán növel |
Hatékonyabb, nincs másolat | Lassabb, mert másolatot csinál |
class Szamlalo {
int ertek;
public:
Szamlalo(int kezdo = 0): ertek(kezdo) {}
// Prefix
Szamlalo& operator++() {
++ertek;
return *this;
}
// Postfix
Szamlalo operator++(int) {
Szamlalo regi = *this;
++ertek;
return regi;
}
void kiir() const {
std::cout << "Érték: " << ertek << std::endl;
}
};
Szamlalo& operator++();
Szamlalo operator++() const;
Hiba | Megoldás |
---|---|
Nem tér vissza *this -re
|
Nincs láncolás (++(++obj) )
|
Nem különbözteti meg a postfixet | Használj dummy int paramétert
|
Visszatérés másolatként | Prefixnél nem kell, csak referenciát |
Tulajdonság | Prefix ++ túlterhelés
|
---|---|
Függvénynév | operator++()
|
Paraméterek | nincs |
Visszatérés | referencia: T&
|
Viselkedés | növel → visszatér magára |
Előny | hatékony, láncolható |