[c++] dynamic_cast w wektorze
Ostatnio zmodyfikowano 2016-05-13 15:25
aaadam Temat założony przez niniejszego użytkownika |
[c++] dynamic_cast w wektorze » 2016-05-13 13:30:46 mam sobbie wektor wapon weapon.h : #pragma once #include "basicBody.h" #include <vector>
class weapon : public basicBody { public: int distance, shooting_calibration; virtual void move() = 0; weapon(); virtual ~weapon(); };
weapon.cpp std::vector < weapon *> Weapons; std::vector < weapon *>::iterator It_Weapons; . . . reszta .
do tego wektora puszuje sobie np : Weapons.push_back( new pistol_bullet( Player.position_x, Player.position_y ) ); Weapons.push_back( new enemyweapon( float( this.position_x ), float( this.position_y ), 1 ) );
i moje pytanie jak sprawdzic w wektorze jakiego typu mam weapony (moglbym zrobic dodatkowa zmienna typu int type; ale chyba to nie ma sensu) for( unsigned int i = 0; i < Weapons.size(); i++ ) { switch dynamiccast na kazdy Weapons[ i ] case enemywapon: rysuj enemywapon case Player: rysuj playerweapon itd }
prosze o pomoc |
|
michal11 |
» 2016-05-13 13:49:46 Cała idea programowania obiektowego, polimorfizmu itp. polega właśnie na tym żeby NIE sprawdzać jakiego typu jest obiekt na który wskazuje wskaźnik, jeżeli musisz to zrobić to znaczy, że ma źle zaprojektowaną hierarchię dziedziczenia albo klasę bazową albo coś jeszcze innego, w każdym razie robisz jakieś błąd. W twoim przypadku nie możesz dać po prostu wirtualnej funkcji draw() w weapon tak żeby każdy rodzaj broni rysował się na swój sposób ?
Jeszcze tylko dodam, że dobrą praktyką jest nazywanie swoich klas z wielkiej litery. |
|
mateczek |
» 2016-05-13 13:50:43 https://pl.wikipedia.org/wiki/RTTI |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2016-05-13 14:02:22 hmmm w sumie racja, powinien każdy obiekt sam się rysować. Będę musiał co nie co pozmieniać,tylko teraz w każdym pliku który odpowiada za obiekt danego typu będę musiał inkludować pliki w których są funkcje do rysowania czy to nie wpłynie na rozmiar aplikacji, płynność itp ...?
|
|
michal11 |
» 2016-05-13 14:57:33 Dodatkowe inculde mogą wpływać na rozmiar aplikacji i czas kompilacji, na płynność nie powinny, przynajmniej nie bezpośrednio. |
|
aaadam Temat założony przez niniejszego użytkownika |
» 2016-05-13 15:25:47 oki dzięki :) |
|
« 1 » |