[cpp] wektor wskaźników na obiekty - polimorfizm
Ostatnio zmodyfikowano 2016-04-29 12:19
aaadam Temat założony przez niniejszego użytkownika |
[cpp] wektor wskaźników na obiekty - polimorfizm » 2016-04-29 10:36:10 piszę gre i nie wiem czemu nie działa mi umieszczanie typów pochodnych w kontenerze bazowym .... przejde do kodu od razu : plik enemy.h class enemy : public basicBody { public: virtual void move() = 0; float speed; enemy(); virtual ~enemy(); };
plik fastWalkingEnemy.h class fastWalkingEnemy : public enemy { public: void move() cout << "fastWalkingEnemy " << endl; fastWalkingEnemy(); ~fastWalkingEnemy(); };
plik hevyEnemy.h class hevyEnemy : public enemy { public: void move() cout << "HevyEnemy" << endl; hevyEnemy(); ~hevyEnemy(); };
resourseMenager.h class resourseMenager final { public: enum LoadState { TileSet, Map }; std::vector < std::vector < tile > > GameMap; std::vector < enemy *> Enemies; std::vector < enemy *>::iterator It_Enemies; void LoadMap( char * filename ); int mouseX, mouseY; resourseMenager(); ~resourseMenager(); };
w funkcji update this->ResourseMenager.Enemies.push_back( fastWalkingEnemy() ); this->ResourseMenager.Enemies.push_back( walkingEnemy() ); this->ResourseMenager.Enemies.push_back( hevyEnemy() );
for( int i = 0; i < this->ResourseMenager.Enemies.size(); i++ ) this->ResourseMenager.Enemies[ i ]->move();
może ktoś pomóc ? |
|
mateczek |
» 2016-04-29 11:23:34 this->ResourseMenager.Enemies.push_back( fastWalkingEnemy() );
jeśli piszę głupoty zignoruj. a poniżej mały program testowy #include <iostream> #include <string> #include<vector> using namespace std; class czlowiek { public: string imie; int wiek; virtual void przedstawSie(); };
void czlowiek::przedstawSie() { cout << "czlowiek " << imie << " lat " << wiek << endl; }
class pracownik : public czlowiek { public: void przedstawSie(); int starzPracy; };
void pracownik::przedstawSie() { cout << "pracownik " << imie << " lat " << wiek << " pracuje lat " << starzPracy << endl; }
int main() { czlowiek c; c.imie = "marek"; c.wiek = 30; pracownik p; p.imie = "piotrek"; p.wiek = 31; p.starzPracy = 3; vector < czlowiek > tablica; tablica.push_back( c ); tablica.push_back( p ); tablica[ 0 ].przedstawSie(); tablica[ 1 ].przedstawSie(); cout << endl; cout << "Test nr2 wskazniki dzialaja lepiej" << endl; vector < czlowiek *> tabl; tabl.push_back( & c ); tabl.push_back( & p ); tabl[ 0 ]->przedstawSie(); tabl[ 1 ]->przedstawSie(); }
|
|
aaadam Temat założony przez niniejszego użytkownika |
» 2016-04-29 11:40:33 "this->ResourseMenager.Enemies.push_back( fastWalkingEnemy() ); // a nie jest tak że kontener masz na wskaźniki //a ładujesz obiekty ??" no wlaśnie chce wskaźniki żeby działał polimorfizm, ale jak dam tak : this->ResourseMenager.Enemies.push_back(*fastWalkingEnemy()); to nie działa ... |
|
mateczek |
» 2016-04-29 12:00:47 this->ResourseMenager.Enemies.push_back( new fastWalkingEnemy );
że tak jeszcze zapytam this->ResourseMenager.Enemies.push_back( fastWalkingEnemy() );
|
|
Kaikso |
» 2016-04-29 12:14:56 @Up: fastWalkingEnemy() to tworzy obiekt tymczasowy z wywołaniem konstruktora domyślnego. |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2016-04-29 12:19:40 z "new" działa dzięki :)
this->ResourseMenager.Enemies.push_back( fastWalkingEnemy() ); //fastWalkingEnemy() to ma być funkcja, że ten nawias dajesz ?? bo nie bardzo kumam ?? tak to jest konstruktor |
|
« 1 » |