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

Metody operatorowe, a obiekty klas pochodnych klasy wirtualnej

Ostatnio zmodyfikowano 2013-06-08 22:43
Autor Wiadomość
Slimoleq
Temat założony przez niniejszego użytkownika
Metody operatorowe, a obiekty klas pochodnych klasy wirtualnej
» 2013-06-08 13:15:39
Witam,
Mam problem z zaimplementowaniem metody operatorowej do klasy dziedziczącej z klasy wirtualnej. Potrafię zrobić taką metodę dla zwykłej klasy, ale powyższy przypadek na ten moment przewyższa nieco moją wiedzę...
W moim programie chciałbym porównywać obiekty klas, tzn. dla przykładu: z wirtualnej klasy figura dziedziczą klasy prostokąt i trójkąt. Tworzę poprzez wektor wskaźników na obiekty klasy figura po dwa trójkąty i prostokąty. Jak program może odczytać, jakiego typu jest który obiekt (trójkąt/prostokąt) i potem poprzez metodę operatorową ==, znajdującą się w obu tych podklasach (trójkąt ma inne składowe i prostokąt inne) porównać je?
Klasa Figura nie ma w sobie metody ==, więc napisanie w main-ie f[1]==f[2] nic nie daje, a wpisanie do niej takiej metody również nic nie daje, jako, że argumentem takiej metody powinien być drugi obiekt jednej z tych pochodnych klas... Prosiłbym o pomoc.
P-85147
jsc
» 2013-06-08 13:23:17
Pewnie musisz napisać metody konwertujące na klasę figura.
P-85149
Slimoleq
Temat założony przez niniejszego użytkownika
» 2013-06-08 13:45:23
Konwersja na inną klasę. Tego też jeszcze nigdy nie robiłem niestety... Wiem, jak zrobić konwersję typów np. int/char itp. ale z tego co widzę w przypadku klas ten sposób nie działa. Można prosić o rozwinięcie tematu?
P-85150
jsc
» 2013-06-08 13:55:40
To jest coś takiego:
C/C++
klasaGlowna::operator klasaRzutowana()
{
    kod
}

Więcej możesz poczytać na http://www.cs.put.poznan.pl/arybarczyk/Kurs%20C++.pdf od strony 364.
P-85151
Slimoleq
Temat założony przez niniejszego użytkownika
» 2013-06-08 14:23:50
Poczytam, dzięki... napiszę, czy się udało później :)

Edit: chyba wiem, jak to działa już, tylko pytanie jeszcze jest takie, jak program ma rozpoznać, kiedy jaką konwersję zastosować. Np. dodaję do tego wektora w losowej kolejności nowe trójkąty/prostokąty i chciałbym sobie funkcję napisać, która by sprawdzała, czy wybrane figury to trójkąty, czy prostokąty i porównywała ich składowe, tylko jeśli to te same typy figur.
P-85154
jsc
» 2013-06-08 14:51:16
Możesz zrobić pole identyfikatora, które może przyjmować za wartość nazwy figur.
P-85161
RazzorFlame
» 2013-06-08 15:10:19
C/C++
if( typeid( *( vect[ i ] ) ) == typeid( Trojkat ) ) //...
P-85165
pekfos
» 2013-06-08 17:34:49
Jak program może odczytać, jakiego typu jest który obiekt (trójkąt/prostokąt) i potem poprzez metodę operatorową ==, znajdującą się w obu tych podklasach (trójkąt ma inne składowe i prostokąt inne) porównać je?
Tak jak wyżej podał RazzorFlame, ale nie rób tak, bo to nie jest dobre rozwiązanie. Najlepiej porzuć na tym etapie operatory == i użyj zwykłych metod wirtualnych. Potem dopiero zdefiniuj globalny operator == który oddeleguje porównanie do tych metod.
C/C++
bool operator ==( const figura & l, const figura & r )
{ }
P-85175
« 1 » 2
  Strona 1 z 2 Następna strona