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

Tworzenie obiektów klasy za pomocą pętli

Ostatnio zmodyfikowano 2014-11-23 12:49
Autor Wiadomość
Heisenberg
Temat założony przez niniejszego użytkownika
» 2014-11-21 20:35:22
To jak to w końcu "przerobić", może utworzyć oddzielną klasę dla obrotu ?
P-121128
Monika90
» 2014-11-21 20:57:11
coś jak to
C/C++
vector < unique_ptr < Planeta >> planety;
for( int i = 0; i < 10; ++i )
{
    if( i != 6 )
         planety.push_back( make_unique < Planeta >( 10, 75, i * 2 * M_PI / 11, 500, 350 ) );
    else
         planety.push_back( make_unique < PlanetaKolorowa >( 10, 75, i * 2 * M_PI / 11, 500, 350, 0, 255, 0 ) );
   
}

for( auto & p: planety )
     p->obroc( omega * dt );

for( auto & p: planety )
     p->rysuj( bufor );


z tym że funkcja składowa rysuj musi być wirtualna, musisz też dodać wirtualny destruktor i pamiętaj o #include <memory>
P-121132
Heisenberg
Temat założony przez niniejszego użytkownika
» 2014-11-21 21:26:16
Czyli tutaj trzeba by było stworzyć 4 wektory typu planeta oddzielnie dla każdego pierścienia, chciałbym móc zmieniać tą wartość omega w czasie pracy programu to nie lepiej byłoby użyć jakieś nowej klasy dla obrotu kul ?
P-121133
Monika90
» 2014-11-21 21:56:28
Jeżeli chesz mieć kilka pierścieni i dla każdego inną wartość omega, to możesz stworzyć klasę Pierscien, która będzie zawierała wektor planet i wartość omega i będzie miała funckję void dodaj_planete(...) i void zmien_omega(double), void obroc_wszystkie(double dt);, void rysuj_wszystkie(BITMAP*); itd...
P-121135
Heisenberg
Temat założony przez niniejszego użytkownika
» 2014-11-22 12:34:40
Nie, omega ma być takie same dla wszystkich pierścieni, tylko chciałbym dodać możliwość zmiany jej wartości w czasie pracy programu.

BTW. Nie ma innego łatwiejszego sposobu w standardzie c++03 ? np. coś takiego

C/C++
int i;
vector < Planeta > Planety1;
Planeta b( 10, 75, i * 2 * M_PI / 11, 500, 350 );
PlanetaKolorowa a( 10, 75, i * 2 * M_PI / 11, 500, 350, 0, 255, 0 );
for( i = 0; i < 11; ++i )
{
    if( i != 6 )
         Planety1.push_back( b );
    else
         Planety1.push_back( a );
   
}
P-121143
Monika90
» 2014-11-22 20:37:09
No to zmieniaj omega w czasie pracy programu, w czym problem?

vector < Planeta > Planety1;
Ten wektor przechowuje tylko obiekty klasy Planeta, jak spróbujesz wstawić tam obiekt klasy PlanetaKolorowa, to zostanie on obcięty i dodany jako Planeta, a nie PlanetaKolorowa, tzn. wszystkie dodatkowe informacje i różnice w zachowaniu względem klasy podstawowej zostaną utracone.

Wiec albo musi to być wektor wskaźników (najlepiej inteligentnych wskaźników).
Albo będziesz miał dwa wektory jeden dla planet, drugi dla planet kolorowych.
Albo zrezygnujesz z dziedziczenia i będziesz miał tylko jedną klasę. Jeżeli planety różnią się tylko kolorem to po co ci dwie klasy?
P-121189
Heisenberg
Temat założony przez niniejszego użytkownika
» 2014-11-23 12:49:58
No jak mam zmieniać omega ?
P-121208
1 « 2 »
Poprzednia strona Strona 2 z 2