Przeciążenie operatorów - zasada działania
Ostatnio zmodyfikowano 2014-11-11 01:13
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ę 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. |
|
DejaVu |
» 2014-11-10 21:33:28 |
|
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: wektor wektor::mnoz_przez_liczbe( const wektor & b, double liczba )
Chciałem ją wykorzystać w operatorze: 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ą. |
|
DejaVu |
» 2014-11-11 00:26:00 Na końcu deklaracji metody powinien być const... |
|
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: wektor wektor::operator *( double liczba ) { wektor temp( * this ); temp.mnoz_przez_liczbe( TUTAJ_WEKTOR, liczba ); return temp; }
Próbowałem trochę "namieszać" m.in. przy użyciu wskaźnika this, ale raczej nie tędy droga... |
|
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? |
|
1 « 2 » |