Ü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 🙂


Log in to reply