[C++] Problem z dziedziczeniem
Ostatnio zmodyfikowano 2010-07-23 15:45
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: 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(); 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 ); } } |
|
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. class CPlayer { private: int HP; public: int GetHP() { return HP; } }; |
|
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: 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 :) |
|
« 1 » |