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

Konstruktor klasy pochodnej

Ostatnio zmodyfikowano 2012-08-01 11:27
Autor Wiadomość
mostrom
Temat założony przez niniejszego użytkownika
Konstruktor klasy pochodnej
» 2012-07-28 18:48:21
Witam!

Witam! tworzę jakiś taki system klas, w którym mógłbym sobie uporządkować obiekty. Hierarchia wygląda tak:
    Obiekt
       Character   : public Obiekt;
           NPC           : public Character;
           Player        : public Character;
       InneObiekty : public Obiekt;
    
na początek znajomy kodzik:
C/C++
class Obiekt
{
public:
    Obiekt( std::string nazwa, int width, int height )
        : _sciezka_pliku( nazwa )
        , _width( width )
        , _height( height )
    { _kolizja = true; }
   
   
    virtual void pokaz( SDL_Surface *, SDL_Rect * gdzie ) = 0;
   
protected:
    std::string _sciezka_pliku;
    int _width; //szerokosc obrazka
    int _height; //wysokosc obrazka
    bool _kolizja;
};

class Character
    : public Obiekt
{
public:
    Character( std::string nazwa, int width, int height, int hp, int lvl )
        : Obiekt( nazwa, width, height )
        , _HP( hp )
        , _lvl( lvl )
    {
        _font = TTF_OpenFont( "font.ttf" );
        /*
                               */
    }
    ~Character();
   
    virtual void pokaz( SDL_Surface *, SDL_Rect * gdzie ) = 0;
   
   
protected:
    int _HP;
    int _lvl;
   
    TTF_Font * _font;
};

class NPC
    : public Character
{
public:
    NPC( std::string nazwa, int width, int height, int hp, int lvl, KOLEJNE_ARG...)
        : Character( nazwa, width, height, hp, lvl )
        , KOLEJNE_ARG(..)
    { }
   
    void pokaz( SDL_Surface *, SDL_Rect * gdzie );
};

class Player
    : public Character
{
    /*      */
};

Jak widać, z każdą pochodną klasą u mnie rośnie ilość argumentów konstruktora tej klasy. Czy da się tak to rozwiązać, aby w konstruktorze klasy podawać tylko te zmienne, które dodałem, a dziedziczone pola przypisywać np z innego obiektu klasy podstawowej?
W poniższym pseuokodzie podałem jak to sobie wyobrażam:
C/C++
Obiekt zwierze( "zwierzeta.bmp", 10, 10 );

NPC biedronka( hp = 10, lvl = 1 );

biedronka = zwierze; //kopiowanie dziedziczonych pól
P-61311
RazzorFlame
» 2012-07-28 20:16:00
Nie lepiej zrobić coś takiego:
C/C++
class JakasKlasa
{
public:
    int jakis_int;
    int inny_int;
    int inniejszy_int; //xD
    void UzupelnijInty();
   
};

class PochodnaKlasa
    : public JakasKlasa
{
   
    PochodnaKlasa( <.....> )
    {
        UzupelnijInty();
    }
   
};

void JakasKlasa::UzupelnijInty()
{
    jakis_int = 23123;
    inny_int = 3434;
    inniejszy_int = 125;
}
I jedziesz dalej :P
P-61313
mostrom
Temat założony przez niniejszego użytkownika
» 2012-07-28 20:50:18
Wtedy musiałbym tworzyć nowe funkcje/metody dla kazdego obiektu klasy. NPC nie jest jeden tylko jest ich kilka i oni sie różnią tymi polami
P-61319
waxx
» 2012-07-28 21:15:01
nie ma, musisz stworzyc sobie funkcje
choc bym to olal te konstruktory nie sa jeszcze az takie zle :)
P-61324
kubawal
» 2012-07-31 20:53:29
nie można tak ?

C/C++
Character( Obiekt & obj, KOLEJNE_ARG...)
    : Obiekt( obj )
{ }
P-61530
mostrom
Temat założony przez niniejszego użytkownika
» 2012-08-01 11:27:43
Można, dzięki. Oto chodziło :)
P-61568
« 1 »
  Strona 1 z 1