unterschied funktion - operator?

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

unterschied funktion - operator?
hi,

habe gerade gelesen, dass funktionen ueberladen werden koennen
und EBENSO operatoren. wo ist denn da der unterschied?

in meinem naiven verstaendnis ist ein operator so etwas wie plus
fuer die natuerlichen zahlen, aber das kann man doch auch als
funktion mit einem parameter auffassen, oder?

und wenn es einen unterschied gibt, wie werden dann operatoren in
c++ realisiert?


Das stimmt schon. In c++ können die eingebauten operatoren wie +, -, *, !, < etc. überladen werden. Das ist praktisch, weil man dann bei eigenen klassen auch einen intuitive schreibweise hat.
An sich unterscheiden die eigenen Operatoren sich nicht von einer Methode. Du deklariert in der klasse dann einfach eine Methode bool operator< ( DeineKlasse& rhs );
Definierst die dann bei deinen anderen Methoden und schon kannst du Vergleiche zwischen Instanzen deiner Klasse ganz einfach mit a < b schreiben, obwohl eigentlich die funktion a.operator<( b ) aufgerufen wird.
Bei den eingebauten Operatoren ist es wohl so, dass man wohl nicht einen Funktionsaufruf bezahlen muss, sondern der compiler dann direkt ein add befehl etc. erstellt.

Edit: Wie kann man nur so viele Fehler in einem Satz machen :). Der Rest bleibt drinnen.


ich denk mal ein hauptunterschied ist noch die priorität gewisser operatoren ggnüber anderen operatoren und insbesondere “normalen” funktionen.


ok,
vielen dank. also ist ein operator wohl tatsaechlich nur eine etwas privilegierte funktion.
ich glaube nicht, dass wir das so schnell brauchen werden, aber egal.


naja, je nach implementierung der priority queue vielleicht doch.
wenn du intern eine std::list o.ä. verwendest, und die Klasse T den< operator
implementiert überlädt, kannst du sie mittels std::list::sort sortieren. :wink:

der operator < erfüllt hierin die gleiche „aufgabe“ wie die vergleichsfunktion, die du qsort(3) übergeben musst:

aber wie gesagt, je nach implementierung.