Ein Aufruf dieser Funktion sähe so aus:
complex a(5.3,6.7); complex b(2,3.421); complex c; c=a.produkt(b);
Dabei würde allerdings b bei der Übergabe an die Methode
mit Hilfe des automatisch generierten Kopierkonstruktors kopiert.
Dies würde bei dieser noch recht kleinen Klasse keine großen
Nachteile bringen, besser wäre aber eine Lösung mit einer
Referenzübergabe, idealerweise natürlich als konstante
Referenz. Eine weitere Optimierungsmöglichkeit besteht bei der
Rückgabe. In der vorgestellten Version wird eine lokale Variable
für das Ergebnis erstellt und diese zurückgegeben. Dabei
wird allerdings noch einmal der Kopierkonstruktor aufgerufen, da ja
keine Referenz auf diese lokale Variable zurückgegeben wird (was
ja auch fatale Folgen hätte), sondern das Ergebnis auch per Wert
zurückgegeben wird. Um dies zu vermeiden kann man auch auf die
lokale Variable verzichten und das Ergebnisobjekt direkt bei der
Rückgabe konstruieren. Die veränderte Funktion sähe
dann so aus (die Deklaration im Rumpf der Klasse müßte
dabei noch angepasst werden), sie würde dank des
Typumwandlungskonstruktors auch eine Multiplikation mit Zahlen vom
Typ float
bzw. Typen, die auf float
konvertiert werden können, erlauben.
complex complex::produkt(const complex &f) { return(real*f.real-imag*f.imag,real*f.imag+imag*f.real); }