Witam!
Nurtuje mnie ostatnio przeciążanie operatorów poprzez metody klasy i funkcje zaprzyjaźnione. Otóż np mamy takie metody w klasie:
class Da {
...
public:
Da operator*(double zmienna) const;
friend Da operator*(double zmienna, const Da & obiekt) const;
};
Jest to mnożenie danych obiektu przez liczbę double.
Ogólnie powiem tyle - nie lubię niejasności i czytania między wierszami. A tutaj pierwsza metoda klasy jest właśnie taką niejasną, gdyż pierwszy parametr jest przekazywany niejawnie. Czy da się przeciążyć operator mnożenia dwoma funkcjami zaprzyjaźnionymi, takimi, jak np. tutaj?
class Da {
...
public:
friend Da operator*(const Da & obiekt, double zmienna) const;
friend Da operator*(double zmienna, const Da & obiekt) const;
};
Kod wtedy jest czytelniejszy, ale czy takie coś jest możliwe?
I mam jeszcze jedno pytanie - czy taką operację mnożenia można wykonać bez funkcji zaprzyjaźnionej? Np. tak:
class Da {
...
public:
Da operator*(double zmienna) const;
Da operator*(double zmienna, const Da & obiekt) const { return obiekt * zmienna; }
};
Wiem, że pytania mogą wydać się jakieś dziwne dla zaprawionych programistów, ale każdy miał swoje początki :) Chyba nie pomyliłem działów?