Beispiele (4/4)

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); 
  }