Ich muss eine abgeleitete Klasse klonen, wenn nur eine Referenz oder ein Zeiger auf die Basisklasse angegeben wird. Der folgende Code macht den Job, scheint aber nicht elegant zu sein, weil ich den Code in viele abgeleitete Klassen C, D, E einfüge, die Geschwister von B sind (nicht gezeigt), die einfach den Standard-Kopierkonstruktor von jedem aufrufen. Ist das nicht der Standard-Kopierkonstruktor, wenn er nur virtuell sein könnte?C++ elegant abgeleitete Klasse durch Aufruf der Basisklasse
Gibt es einen besseren Weg?
ein virtueller Zuweisungsoperator zu machen wäre falsch, wie ich C zu B, B bis D, etc., nur Klon B, C, D oder E zuzuordnen nicht will
#include <iostream>
using namespace std;
class A {
public:
virtual ~A() {}
virtual A* clone()=0;
};
class B : public A {
int i;
public:
virtual A* clone() {
cout << "cloned B" << endl;
return new B(*this);
}
virtual ~B() { cout << "destroyed b" << endl; }
};
int main() {
A* a = new B();
A* aa = a->clone();
delete a;
delete aa;
return 0;
}
keine vorformulierten, aber rekursive Vorlagen mit einziehe ... sollte ich vorsichtig sein, was ich wünsche! –