Skopiowanie wektora dynamicznie tworzonych obiektów wskaźnikiem do klasy wirtualnej
Ostatnio zmodyfikowano 2019-01-26 13:25
ziombelas Temat założony przez niniejszego użytkownika |
Skopiowanie wektora dynamicznie tworzonych obiektów wskaźnikiem do klasy wirtualnej » 2019-01-26 10:45:01 Mam klasę abstrakcyjną Figure, przechowuje jej obiekty w pojemniku: std::vector<Figure*> figures; Obiekty są tworzone dynamicznie jak np. figures.push_back(new Rook(currentColor, &chessboard.field[y][x], &chessboard));
Teraz chciałbym utworzyć kopię obiekt po obiekcie otrzymując wektor wskaźników do kopii tych obiektów (nie jako wskaźniki wskazujące na ten sam obiekt). Czy ktoś widzi taką możliwość? |
|
pekfos |
» 2019-01-26 11:45:48 Obiekty muszą wiedzieć, jak się skopiować. #include <iostream> #include <vector>
class Figura { public: virtual Figura * clone() = 0; virtual void info() = 0; };
class Kwadrat : public Figura { float a; public: Kwadrat( float a ) : a( a ) { } Figura * clone() override { return new Kwadrat( a ); } void info() override { std::cout << "Kwadrat (" <<( void * ) this << ") " << a << " x " << a << '\n'; } };
class Prostokat : public Figura { float a, b; public: Prostokat( float a, float b ) : a( a ) , b( b ) { } Figura * clone() override { return new Prostokat( a, b ); } void info() override { std::cout << "Prostokat (" <<( void * ) this << ")" << a << " x " << b << '\n'; } };
int main() { std::vector < Figura *> v; v.push_back( new Kwadrat( 5 ) ); v.push_back( new Prostokat( 3, 10 ) ); for( auto * p: v ) p->info(); std::vector < Figura *> kopia; kopia.reserve( v.size() ); for( auto * p: v ) kopia.push_back( p->clone() ); for( auto * p: kopia ) p->info(); } Kwadrat (0xd324d0) 5 x 5 Prostokat (0xd32510)3 x 10 Kwadrat (0xb72800) 5 x 5 Prostokat (0xb72820)3 x 10 |
|
ziombelas Temat założony przez niniejszego użytkownika |
» 2019-01-26 13:01:36 Dziękuję, o to to :). Widzę, że nowe standardy rozwiązały szybko sprawę a mi pozostaje się ich douczyć :)
Język znam naprawdę dobrze, lecz niestety ten z poprzedniej dekady czyli zatrzymałem się na szablonach i tego typu sprawach. Kodować potrafię. Proszę Cię jako eksperta o sugestie skąd warto się douczyć nowych wersji c++? Polecasz może książkę "Skuteczny nowoczesny C++. 42 sposoby lepszego posługiwania się językami C++11 I C++14", autor Meyers Scott? |
|
pekfos |
» 2019-01-26 13:25:19 Nie czytałem książki o C++ od 5 lat, ale od Scotta Meyersa pewnie będzie dobra. |
|
« 1 » |