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

Kopiowanie obiektu

Ostatnio zmodyfikowano 2016-09-11 20:16
Autor Wiadomość
skovv
Temat założony przez niniejszego użytkownika
Kopiowanie obiektu
» 2016-09-11 14:16:52
Witam :)

Mam 1 klasę bazową:
C/C++
class Baza {
public:
    int x;
};

i 2 które z niej korzystają:
C/C++
class A
    : public Baza
{ };
class B
    : public Baza
{ };

Obiekty A i B mają robić za obiekty w grze, aby było łatwiej wszystko zautomatyzować mam listę obiektów(vector<Baza*>) i w razie potrzeby odwołania się bezpośrednio do obiektu A lub B używam dynamic_cast i wszystko gra. Zastanawiam się jednak czy jest możliwe sklonowanie obiektu z listy bez podawania klasy głównej(A lub B)

C/C++
Baza * a = new A();
Baza b = * a;
A * c = dynamic_cast < A *>( b );
Coś w ten deseń..?
P-151663
pekfos
» 2016-09-11 14:24:51
Dodaj do klasy bazowej metodę wirtualną do klonowania obiektu. Każda klasa pochodna niech sama sobie zaimplementuje kopiowanie wszystkiego, co dodała od siebie.
P-151664
skovv
Temat założony przez niniejszego użytkownika
» 2016-09-11 16:08:32
C/C++
Actor * i1 = new A();
Actor nw( * i1 );
Actor nw2( * i1 );
A nxx( * dynamic_cast < A *>( & nw ) );
A nxx2( * dynamic_cast < A *>( & nw2 ) );
Chodziło Ci o to, prawda? Tak, to by rozwiązywało problem. Niestety szukam rozwiązania które nie wymaga podawania klasy pochodnej: chciałbym podać string(nazwę klasy) i na jego podstawie kopiowałby sie odpowiedni obiekt.

C/C++
vector < Actor *> lista;
lista.push_back( new A() ); // Trzymam tez ich nazwy
lista.push_nack( new B() ); // dla przykladu jednak niech bedzie zwięźlej

// tworzmy nowy obiekt
void nowy( string name ) {
    // szukamy konkretnego uchwytu..
    Actor nowy( * i1 ); // znaleziony
    // ale chcialbym uniknac:
    A nxx( * dynamic_cast < A *>( & nowy ) );
    // bo zależy mi na automacie
}
P-151666
pekfos
» 2016-09-11 17:36:26
Dodaj do klasy bazowej metodę wirtualną
Wydawało mi się, że nie da się tego nie zrozumieć..
P-151668
skovv
Temat założony przez niniejszego użytkownika
» 2016-09-11 20:16:38
Haha dobra, już ogarnalem, wszystko działa. Tak to jest jak sie kodzi po godzinach :D Dzięki wielkie!
P-151674
« 1 »
  Strona 1 z 1