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.
|
|
jsc |
» 2013-06-08 13:23:17 Pewnie musisz napisać metody konwertujące na klasę figura. |
|
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? |
|
jsc |
» 2013-06-08 13:55:40 |
|
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. |
|
jsc |
» 2013-06-08 14:51:16 Możesz zrobić pole identyfikatora, które może przyjmować za wartość nazwy figur. |
|
RazzorFlame |
» 2013-06-08 15:10:19 if( typeid( *( vect[ i ] ) ) == typeid( Trojkat ) )
|
|
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. bool operator ==( const figura & l, const figura & r ) { } |
|
« 1 » 2 |