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

[c++] dynamic_cast w wektorze

Ostatnio zmodyfikowano 2016-05-13 15:25
Autor Wiadomość
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 :

C/C++
#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

C/C++
std::vector < weapon *> Weapons;
std::vector < weapon *>::iterator It_Weapons;
.
.
.
reszta
.
do tego wektora puszuje sobie np :

C/C++
Weapons.push_back( new pistol_bullet( Player.position_x, Player.position_y ) ); /// w pliku obslugi myszki
Weapons.push_back( new enemyweapon( float( this.position_x ), float( this.position_y ), 1 ) ); // w pliku obslugi obiektu enemy

i moje pytanie jak sprawdzic w wektorze jakiego typu mam weapony (moglbym zrobic dodatkowa zmienna typu int type;  ale chyba to nie ma sensu)
C/C++
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
P-148161
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.
P-148162
mateczek
» 2016-05-13 13:50:43
https://pl.wikipedia.org/wiki/RTTI
P-148163
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 ...?
P-148164
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.
P-148165
aaadam
Temat założony przez niniejszego użytkownika
» 2016-05-13 15:25:47
oki dzięki :)
P-148167
« 1 »
  Strona 1 z 1