Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przeciążenie operatorów - zasada działania

Ostatnio zmodyfikowano 2014-11-11 01:13
Autor Wiadomość
Atexor
Temat założony przez niniejszego użytkownika
» 2014-11-10 21:19:25
edit: tak długo mi zajęło testowanie programu i pisanie tej wiadomości, że nie zauważyłem że poprawiłaś :)
--------------------------------------------------------------------------------------------------
Czy tutaj nie powinno być kropki zamiast strzałki?
Obiekt w nie jest wskaźnikiem, więc dostęp do metody być przy użyciu kropki chyba, przy strzałce Visual podkreśla błąd. Jak teraz testuję program to wygląda na to, że działa. Użyję tego do pozostałych operatorów, bo zapewne mają tę samą przypadłość. Bardzo Ci dziękuję za to.
w->dodaj( b );

--------------------------------------------------------------------------------------------------

Mógłbym jeszcze ponowić pytanie jak rozwiązać kwestię

C/C++
wektor wek_3 = wek_1 * wek_2;
wektor wek_4 = wek_3 * liczba;
tzn. aby program korzystał z odpowiedniego operatora?

Próbowałem utworzyć drugi operator mnożenia, który zamiast wektora dostaje argument-liczbę:

wektor wektor::operator*(double liczba)
{
    wektor w(*this);
    w.mnoz(liczba);
    return w;
}

jednak wtedy brakuje wektora do użycia metody mnożenia, zaś sam operator nie może przyjąć 2 argumentów.
P-120341
DejaVu
» 2014-11-10 21:33:28
Mhm... skoro są różne typy to i zostaną zastosowane różne operatory. To tak jak byś miał dwie metody:
C/C++
struct Klasa
{
    void dodaj( int );
    void dodaj( const Klasa & );
};
W zależności od tego co wywołasz, to zostanie zastosowane.

http://cpp0x.pl/dokumentacja​/standard-C++​/Przeciazanie-operatorow​/operator+/1512
P-120342
Atexor
Temat założony przez niniejszego użytkownika
» 2014-11-10 21:58:52
skoro są różne typy to i zostaną zastosowane różne operatory

Właśnie ten fakt próbowałem wykorzystać.
W tym celu utworzyłem drugą metodę która ma służyć mnożeniu przez skalar, która przyjmuje 2 argumenty:
C/C++
wektor wektor::mnoz_przez_liczbe( const wektor & b, double liczba )

Chciałem ją wykorzystać w operatorze:
C/C++
wektor wektor::operator *( double liczba )
{
    wektor temp( * this );
    temp.mnoz_przez_liczbe( const wektor & b, liczba );
    return temp;
}

i tutaj problem, bo nie mogę przekazać wektora na żaden sposób do tej metody - "Error: type name is not allowed", a bez typu i ampersanda mam nieznaną zmienną.
P-120343
DejaVu
» 2014-11-11 00:26:00
Na końcu deklaracji metody powinien być const...
P-120351
Atexor
Temat założony przez niniejszego użytkownika
» 2014-11-11 00:58:05
Ogólnie to metody mam statyczne, abym mógł poza użyciem przeciążenia operatorów także używać konkretnych metod przypisanych do klasy (nie jej instancji), np.
wektor wek_m5 = wektor::dodaj( wek_m1, wek_m4 );

Jednakże metodę mnożenia zmieniłem metodę na stałą, ale nadal nie rozwiązuje to problemu jak do metody w operatorze przekazać poza liczbą także wektor:

C/C++
wektor wektor::operator *( double liczba )
{
    wektor temp( * this );
    temp.mnoz_przez_liczbe( TUTAJ_WEKTOR, liczba ); //jak tu przekazać?
    return temp;
}

Próbowałem trochę "namieszać" m.in. przy użyciu wskaźnika this, ale raczej nie tędy droga...
P-120353
DejaVu
» 2014-11-11 01:13:33
Nic nie rozumiesz z tego co piszesz. Składasz losowo kod i myślisz, że zadziała. Napisz najpierw poprawny kod w oparciu o metody, a potem zabieraj się za przeciążanie operatorów. Po co chcesz przekazywać
TUTAJ_WEKTOR
 skoro to jest obiekt, który jest wektorem?
P-120355
1 « 2 »
Poprzednia strona Strona 2 z 2