Operatoren + Komplexe Zahlen



  • Hallo,
    hab hier ein Programmcode vor mir liegen der 2 Komplexe zahlen multipliziert mittels einen überladenen Operator. Soweit so gut. Die Ergebnisse stimmen und ich versteh an sich den kompletten Code. Nur eine Sache ist mit schleierhaft. Die Operator Methode der Klasse lautet folgendermaßen:

    complex complex::operator * (complex c1) {
    
    	return complex((c1.re * re) - (c1.im * im), (c1.re * im) + (c1.im * re));
    }
    

    Und der aufruf in main sieht z.B. so aus:

    complex a(5,-7);
    complex b(18,3);
    complex c;
    
    c=a*b;
    

    Wieso übernimmt die Methode nur ein Objekt ? Im Übergabeobjekt "c1" steht ja jetzt das "b" aus main und über z.B: c1.re kann ich auf die Private Variable des Objekts zugreifen. Aber wieso kann ich mit "re" und "im" direkt auf die Variablen vom Objekt "a" aus main zugreifen ohne das dieses an die Operator Methode Übergeben wurde ?

    Kann mir das mal jemand mit möglichst einfachen Worten erklären damits auch ein C++ Anfänger wie ich versteht?

    Danke.

    MfG Holger.



  • Hallo,

    auf die Membervariablen kannst du zugreifen, weil es sich hier um eine Member-
    function handelt. Du koenntest folgendes:

    c=a*b;
    

    auch so schreiben, vielleicht wird es dann klarer:

    c=a.operator*(b);
    

    mfg
    v R



  • Du könntest operator* aber auch so implementieren:

    class complex
    	{
    		... //ohne operator*
    	}
    
    	//globale Deklaration
    	const complex operator*(const complex& lhs, const complex& rhs)
    	{
    		return complex(lhs.re() * rhs.re() - lhs.im() * rhs.im(), 
    		               lhs.im() * rhs.re() + lhs.re() * rhs.im());
    	}
    


  • Ihr habt mir beide sehr geholfen.

    c=a*b; ist also quasi nur ne andere Schreibweise für c=a.operator*(b); !
    Muss man erstmal drauf kommen als Anfänger. 😉

    Danke Jungs!



  • ~Holgi27 schrieb:

    c=a*b; ist also quasi nur ne andere Schreibweise für c=a.operator*(b); !

    Oder aber für

    c=operator*(a,b)
    

    wie fubar schon sagte! Beides ist möglich...


Anmelden zum Antworten