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

[C++] Problem z dziedziczeniem

Ostatnio zmodyfikowano 2010-07-23 15:45
Autor Wiadomość
stecboss
Temat założony przez niniejszego użytkownika
[C++] Problem z dziedziczeniem
» 2010-07-22 18:00:15
Witam, mam problem z dziedziczeniem elementu z klasy Cpostac do Cmenu. Chce aby w klasie Cmenu byl dostep do zmiennej zycia z klasy Cpostac wszystko ok tylko, ze podczas dzialania programu zmienna zycia powinna sie zmieniac. (ezeli instrukcje wyswietlania obrazkow lub kontrolnie wypisywanie stanu zmiennej zycia dam w main(), a nie w klasie class Cmenu to wszytko jest ok i zycia sie zmieniaja, a jak napisze w funkcji
Cmenu::wyswietl_obrazki() to zmienna zycia caly czas =100
Nie chce dac tej zmiennej globalnie tylko "zamknac w klasie" ucze sie obiektowosci i allegro i proszę o wyrozumiałość  oto kody:

C/C++
class Cpostac
{
public:
    int pozs_x, pozs_y;
    int pozpoc_x, pozpoc_y;
    volatile int zycia;
    void chodzenie();
    void strzelanie();
    void ograniczniki();
    void graf_sound();
    //konstruktor
    Cpostac::Cpostac()
    {
        pozs_x = 250;
        pozs_y = 400;
        zycia = 100;
    }
};



class Cmenu
    : private Cpostac
{
public:
    int pozstathp_x, pozstathp_y;
    int pozmenu_x, pozmenu_y;
    void wyswietl_obrazki();
    Cmenu::Cmenu()
    {
        pozmenu_x = 0;
        pozmenu_y = 480;
        pozstathp_x = 10;
        pozstathp_y = 515;
    }
};

void Cmenu::wyswietl_obrazki()
{
    masked_blit( menudolne, bufor, 0, 0, pozmenu_x, pozmenu_y, menudolne->w, menudolne->h );
   
    if( zycia > 90 )
    {
        masked_blit( Statek_HP100, bufor, 0, 0, pozstathp_x, pozstathp_y, Statek_HP100->w, Statek_HP100->h );
    }
    textprintf_ex( bufor, font, 20, 20, makecol( 200, 200, 200 ), - 1, "%d", zycia );
    if(( zycia > 80 ) &&( zycia <= 90 ) )
    {
        masked_blit( Statek_HP90, bufor, 0, 0, pozstathp_x, pozstathp_y, Statek_HP100->w, Statek_HP100->h );
    }
}
P-20088
waxx
» 2010-07-22 19:32:37
Uczysz się programowania obiektowego więc pomogę.
Po 1. błąd w założeniach - od kiedy menu dziedziczy po graczu? Po co?! Co mają te dwa ze sobą wspolnego?
Dalej, wcale zmienna nie musi być globalna żebyś znał jej wartość. Dorób sobie akcesor.

C/C++
class CPlayer
{
private:
    int HP;
   
public:
    int GetHP() { return HP; }
};
P-20101
steckel
» 2010-07-23 15:45:28
Po co dajesz 'volatile' przed 'zycia'?

Pewnie tworzysz 2 osobne obiekty typu CPostac i CMenu. Również uważam, że dziedziczenie jest tu nie potrzebne. Spróbuj użyć wskaźnika na obiekt:

C/C++
class CMenu {
private:
    CPostac * postac_;
   
public:
    void Init( CPostac * postac );
    void Wyswietl();
};

void CMenu::Init( CPostac * postac ) {
    postac_ = postac;
}

void Wyswietl() {
    cos_tam_blit( postac_->GetHP() );
}

Mam nadzieję, że pomogłem :)
P-20114
« 1 »
  Strona 1 z 1