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

C++ Obiektowość | Dziedziczenie

Ostatnio zmodyfikowano 2011-10-31 17:55
Autor Wiadomość
skovv
Temat założony przez niniejszego użytkownika
» 2011-10-30 15:08:34
Tak żeby nie otwierać nowego tematu to zapytam tu: Jak odwołać się do zmiennej obiektu dziedziczącemu klasy OBJECT?? Proszę spojrzeć na przykład:
C/C++
class OBJECT
{
public:
    bool blabla; //zmienne, wśród nich nie ma bool atak2
    OBJECT()
    {
        blabla = true;
    }
    int xxx()
    {
        return 1;
    }
};
class GRACZ
    : public OBJECT
{
public:
    bool atak2; //zmienna gracza potrzebna do ataku, tej zmiennej nie widzi obiekt CZAR... jak to zmienić?
   
    GRACZ()
    {
        atak2 = false;
    }
};
class CZAR
    : public OBJECT
{
public:
    bool dziala;
    CZAR() { dziala = true; }
    void Update()
    {
        if( !Eng.Obj[ objCreator.int_id ]->atak2 )
        { /*w klasie Eng obj jest typu std::vector < OBJECT *>
                    obj.Creator.int_id zwraca id obiektu który stworzył czar
                    atak2 to zmienna do której usiłuję się dostać( jeśli dam ją w obiekcie OBJECT to CZAR ją widzi, a jeśli w GRACZ to nie ) */
            dziala = false;
        }
    }
};
P-43055
DejaVu
» 2011-10-30 15:20:36
C/C++
Obiekt * pObiekt = new Gracz;
Gracz * xxx = dynamic_cast < Gracz *>( pObiekt );
if( xxx )
     xxx->metodaGracza();
P-43058
skovv
Temat założony przez niniejszego użytkownika
» 2011-10-30 15:24:28
kompletnie nie rozumiem co napisałeś :| Mógłbyś wpisać w to w szablon i opisać? Byłbym bardzo wdzięczny
P-43061
DejaVu
» 2011-10-30 15:25:28
P-43062
skovv
Temat założony przez niniejszego użytkownika
» 2011-10-30 15:41:43
Ehh... Tam jest nieco inna sytuacja bo:
C/C++
class B {...};
class C
    : public B
{...}; //c jest potomkiem b
class D
    : public C
{...}; //d jest potomkiem c

Może powiem jak to robie:
na początku tworze obiekty( 4 ścianki i 1 gracza ) dodając je do listy obiektów( jak na początku tematu ). Gram sobie gram i nagle chcę zaatakować. Wciskam klawisz X i do listy obiektow dodaje CZAR na pozycji(x|y) i z numerem obiektu na liście obiektów(aby było wiadomo w którym obiekcie szukać zmiennej). Gracz wykonuje animacje i atakuje, jednak po pewnym czasie czar ma się wyłączyć, dlatego potrzebna mi jest zmienna atak2. Klasa główna OBJECT nie posiada
bool atak2
 i przez to przy kompilacji CZAR domaga się dodania. Gdy dodam zmienną do klasy OBJECT to wszystko działa prawidłowo(czar wie kiedy się wyłączyć) jednak w przeciwnym razie nie działa :/
P-43065
DejaVu
» 2011-10-30 15:47:48
Chcesz osiągnąć rozwiązanie nie próbując nawet zrozumieć co to jest dynamic_cast i jak działa...
P-43067
skovv
Temat założony przez niniejszego użytkownika
» 2011-10-30 16:05:17
Czy chodziło o coś takiego?
C/C++
class CZAR
    : public OBJECT
{
public:
    OBJECT_ID objCreator;
    OBJECT * pObiekt;
    GRACZ * atak2;
    CZAR( int x = 0, int y = 0, OBJECT_ID ObjWhoCreateMe )
    {
        objCreator = ObjWhoCreateMe;
        pObiekt = Eng.Obj[ objCreator.int_id ]; //new GRACZ(0,0);
        atak2 = dynamic_cast < GRACZ *>( pObiekt );
    }
    void Update()
    {
        atak2 = dynamic_cast < GRACZ *>( pObiekt );
        /*
                ...
                */
        if( atak2 )
        {
            Eng.ObjectDelete( ObjID.vec_id );
            dziala = false;
        }
    }
};

To niestety nie działa :/ Czar pojawia się i odrazu znika.
P-43069
skovv
Temat założony przez niniejszego użytkownika
» 2011-10-30 17:00:25
Nie no... http://msdn.microsoft.com/en-us/library/cby9kycs%28v=vs.71%29.aspx tutaj nie ma nic o pobieraniu zmiennych, nawet nie ma żadnych w przykładach :/
P-43074
1 « 2 » 3 4
Poprzednia strona Strona 2 z 4 Następna strona