Przeładowanie operatorów - coś mi tu nie gra

0

Przerabiam właśnie przeładowanie operatorów z Symfonii C++

Pokażę może na przykładzie o co się rozchodzi. Mianowicie jest podana funkcja imitująca dodawanie liczb zespolonych:

 
zespol dodaj (zespol a, zespol b)
{
zespol suma(0,0);
   suma.rzeczyw = a.rzeczyw + b.rzeczyw;
   suma.urojon = a.urojon + b.urojon;
   return suma;
}

Teraz z tej funkcji jest wykonany operator + aby łatwiej można to było dodawać. W książce taki operator wygląda tak:

 
zespol operator+(zespol a, zespol b)
{
zespol suma ;
   suma.rzeczyw = a.rzeczyw + b.rzeczyw;
   suma.urojon = a.urojon + b.urojon;
   return suma;
}

I teraz pytanie - dlaczego przy zespol suma ; nie ma już inicjalizacji za pomocą zer (0,0); Przecież sumę zawszę się zeruje, aby nie było tam śmieci ?

0
  1. Ten operator powinien być metoda klasy, więc będzie wyglądal inaczej.
  2. A po co zerować skoro i tak zaraz podstawisz tam inne wartości?
  3. A jak wygląda konstruktor? Może ma argumenty domyślne?
0

Klasa tego wygląda tak:

 
class zespol {
public:
   float rzeczyw;
   float urojon;
   //konstruktor
   zespol(float r, float i) : rzeczyw(r), urojon(i){}
};

Funkcja dodaj jest funkcją globalną.

Co do zerowania sumy, to pamiętam jak się uczyłem prostszych przykładów typu zlicz elementy tablicy, to sumę się zerowało. Ale już chyba wiem dlaczego :) Teraz jak to piszę to mnie olśniło ;)

W sumie kwestia rozwiązana. Ale w takim razie, dlaczego w pierwszej funkcji było suma(0,0) a w drugiej już bez tego? Ma to jakiś wpływ?

0

To bez znaczenia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1