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 ? |
|
Monika90 |
» 2014-11-21 20:57:11 coś jak to 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> |
|
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 ? |
|
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... |
|
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 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 ); }
|
|
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? |
|
Heisenberg Temat założony przez niniejszego użytkownika |
» 2014-11-23 12:49:58 No jak mam zmieniać omega ? |
|
1 « 2 » |