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ść
RazzorFlame
» 2013-06-08 19:31:56
ale nie rób tak, bo to nie jest dobre rozwiązanie
Może powiesz dlaczego?
P-85194
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.
P-85199
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...
C/C++
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;
    }
    // ..........obwód/pole itp................... //
    bool operator ==( const Trojkat & t )
    {
        if( podstawa == t.podstawa && ramie1 == t.ramie1 && ramie2 == t.ramie2 && wysokosc == t.wysokosc )
        {
            return true;
        }
        else
        {
            return false;
        }
    }
};
//........................reszta pochodnych klasy figura..............

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;
    //.............................reszta funkcji......................
}

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...
P-85212
jankowalski25
» 2013-06-08 22:42:37
Zamiast
typeid( i[ 0 ] ).name()
 spróbuj napisać
typeid( * i[ 0 ] ).name()
.
P-85214
Slimoleq
Temat założony przez niniejszego użytkownika
» 2013-06-08 22:43:29
ooo, dzięki wielkie, działa :)
P-85215
1 « 2 »
Poprzednia strona Strona 2 z 2