Jak przeciążyć operator ++ na dwa różne sposoby dla postfiksu a++
i prefiksu ++a
?
c++
operator-overloading
rekrut
źródło
źródło
Odpowiedzi:
Powinien wyglądać tak:
źródło
Number operator++ (int)
przyjmuje sięint
parametr jako parametr, mimo że go nie używasz?++x
jest prefiksem i dlatego wywołuje,operator++()
gdyx++
jest postfiksem, a zatem wywołujeoperator++(int)
Różnica polega na tym, jaki podpis wybierzesz dla swojego przeciążenia
operator ++
.Cytowane z odpowiedniego artykułu na ten temat w C ++ FAQ (przejdź tam, aby uzyskać więcej informacji):
PS: Kiedy się o tym dowiedziałem, początkowo zobaczyłem tylko parametr zastępczy, ale różne typy zwracanych danych są w rzeczywistości bardziej interesujące; mogą wyjaśnić, dlaczego
++x
jest uważany za bardziej skuteczny niżx++
ogólnie .źródło
Istnieją dwa sposoby na przeciążenie dwóch operatorów (prefiks / postfiks) ++ dla typu T:
Metoda obiektu:
To najłatwiejszy sposób, używając „powszechnego” idiomu OOP.
Funkcja niebędąca elementem obiektu:
Jest to inny sposób: tak długo, jak funkcje znajdują się w tej samej przestrzeni nazw, co obiekt, do którego się odwołują, będą one brane pod uwagę, gdy kompilator będzie szukał funkcji do obsługi
++t ;
lubt++ ;
kodu:Należy pamiętać, że z punktu widzenia C ++ (w tym punktu widzenia kompilatora C ++) te funkcje niebędące składnikami są nadal częścią interfejsu T (o ile znajdują się w tej samej przestrzeni nazw).
Istnieją dwie potencjalne zalety notacji funkcji niebędącej składową:
źródło
Zadeklaruj tak:
Wdrażaj poprawnie - nie mieszaj do tego, co wszyscy wiedzą, że robią (zwiększaj, a potem używaj, używaj, a potem zwiększaj).
źródło
Wiem, że jest późno, ale miałem ten sam problem i znalazłem prostsze rozwiązanie. Nie zrozumcie mnie źle, jest to to samo rozwiązanie, co najlepsze (opublikowane przez Martina Yorka). To jest trochę prostsze. Tylko trochę. Oto ona:
Powyższe rozwiązanie jest nieco prostsze, ponieważ nie wykorzystuje tymczasowego obiektu w metodzie postfix.
źródło