Überladung von () oder nicht?
-
Hallo,
ich habe eine kurze Frage zu folgendem Code Ausschnitt:
Vector a(4); //oder Vector d(7, varname);
setzen diese Code Beispiele eine Überladung des () Operators in einer header Datei voraus oder ist das nicht nötig?
-
Diese Beispiele setzen mindestens zwei Konstruktoren voraus, mit Operatorüberladung hat das aber nichts zu tun.
-
ok danke schonmal.
und was sagst du zu diesem Beispiel?
class demo d; int i; i = d(5,8);
Hat das was mit Operatorüberladung zu tun?
-
genau das gleiche wie vorhin du blindschleiche
-
mr crack schrieb:
genau das gleiche wie vorhin du blindschleiche
ganz sicher?
nee, ist ein op()!
#include <iostream> using namespace std; class demo{ public: int operator()(int a,int b){ return a+b; } }; class demo d; int i; i = d(5,8); int main(){ cout<<i<<'\n'; }
-
Kann mir jemand in einfachen Worten den Unterschied der beiden Schnipsel erklären? Wieso genau ist es im ersten Fall keine Überladung vom () Operator?
btw: Das mit der Blindschleiche war nicht nett, gar nicht nett...
-
Beim ersten Codeschnippsel initialisiert du das Object a/d über den Konstruktor. Das ist die um ein assignment verkürzte Schreibweise von:
Vektor d = Vektor(7, varname);
Mit Klassenname(/*Parameterliste*/) kann man ein neues Objekt vom Typ Klassenname erzeugen, wobei der Konstruktor mit der richtigen Parameterliste aufgerufen wird.
Im zweiten Fall rufst du bei einer initialisierten Vektor Klasse d den () Operator auf.
-
ok das klingt schon sehr einleuchtend. danke bluecode.
Beim zweiten ist das quasi so, dass durch
class demo d;
bereits der Standardkonstruktor aufgerufen wird, oder? Und das Objekt d wird dann ähnlich wie eine Methode benutzt, durch die Überladung des () Operators, richtig?
-
Vollkommen korrekt.
(außer daß "Funktion" wohl besser passt als "Methode" ;))
-
Funktion deshalb, weil man es auch außerhalb einer Klasse nutzen kann, oder?
Danke, ihr seid super