Metody operatorowe, a obiekty klas pochodnych klasy wirtualnej
Ostatnio zmodyfikowano 2013-06-08 22:43
RazzorFlame |
» 2013-06-08 19:31:56 ale nie rób tak, bo to nie jest dobre rozwiązanie |
Może powiesz dlaczego? |
|
pekfos |
» 2013-06-08 20:06:04 Takie rozwiązanie jest nierozszerzalne. Dodanie nowej klasy wymaga modyfikowania innego kodu. Ponadto RTTI uchodzi za złą praktykę.
PS: I zapomniałeś dopisać, że trzeba dołączyć <typeinfo>. Bez tego program jest nieprawidłowy. |
|
Slimoleq Temat założony przez niniejszego użytkownika |
» 2013-06-08 22:19:04 Chwilę pobawiłem się tym typeid, ale niestety zwraca mi nazwę Figura, więc nadal nie o to chodzi, albo źle z tego korzystam... może dla rozjaśnienia dam najważniejszy fragment kodu, bo może źle sytuację opisałem... class Figura { public: virtual void dajPole() = 0; virtual void dajObwod() = 0; virtual void wypisz() = 0; virtual void zapis() = 0; virtual ~Figura() { }; }; class Trojkat : public Figura { int podstawa, ramie1, ramie2, wysokosc; public: Trojkat( int pod, int ra1, int ra2, int wys ) { this->podstawa = pod; this->ramie1 = ra1; this->ramie2 = ra2; this->wysokosc = wys; } bool operator ==( const Trojkat & t ) { if( podstawa == t.podstawa && ramie1 == t.ramie1 && ramie2 == t.ramie2 && wysokosc == t.wysokosc ) { return true; } else { return false; } } };
int main() { vector < Figura *> i( 10 ); i[ 0 ] = new Trojkat( 1, 1, 1, 1 ); i[ 1 ] = new Trojkat( 2, 2, 2, 2 ); cout << typeid( Trojkat ).name() << endl; cout << "Ta figura to: " << typeid( i[ 0 ] ).name() << endl; } linijka cout << typeid( Trojkat ).name() << endl; zwraca dobrze Trojkąt, natomiast cout << "Ta figura to: " << typeid( i[ 0 ] ).name() << endl; jak już napisałem Figura. Może zrobiłem coś nie tak... |
|
jankowalski25 |
» 2013-06-08 22:42:37 Zamiast typeid( i[ 0 ] ).name() spróbuj napisać typeid( * i[ 0 ] ).name() . |
|
Slimoleq Temat założony przez niniejszego użytkownika |
» 2013-06-08 22:43:29 ooo, dzięki wielkie, działa :) |
|
1 « 2 » |