Ich habe die Basisklasse Base
von dem abgeleitet wird Derived1
, Derived2
y Derived3
.
Ich habe eine Instanz für eine der abgeleiteten Klassen erstellt, die ich als Base* a
. Ich muss nun eine tiefe Kopie des Objekts erstellen, die ich als Base* b
.
Soweit ich weiß, ist der normale Weg, eine Klasse zu kopieren, die Verwendung von Kopierkonstruktoren und das Überladen von operator=
. Da ich jedoch nicht weiß, ob a
ist vom Typ Derived1
, Derived2
o Derived3
Ich kann mir nicht vorstellen, wie man entweder den Kopierkonstruktor oder operator=
. Der einzige Weg, den ich mir vorstellen kann, um dies sauber zu machen, ist, etwas wie zu implementieren:
class Base
{
public:
virtual Base* Clone() = 0;
};
und das Gerät Clone
in der abgeleiteten Klasse wie in:
class Derivedn : public Base
{
public:
Base* Clone()
{
Derived1* ret = new Derived1;
copy all the data members
}
};
Java neigt zur Verwendung von Clone
Gibt es eine bessere Möglichkeit, dies mit C++ zu tun?