Kopierkonstruktor mit tiefer Kopie
-
Hallo Leute,
ich habe eine Aufgabe bei der ich folgendes machen muss.
Ich habe 3 Klassen mit einer "zu many" Association A->*B->*CA: Enthält nur -iA_ : int
B: Enthält nur -iB_ : int
C: Enthält nur -IC_: intDie Aufgabe lautet:
Implementieren den notwendigen Codefür alle Klassen, sodass A einen Kopierkonstruktur
für tiefe Kopien enthält. Containertyp list . Set und Getter sind nicht notwendig!
Weitere Konstruktoren und Destruktoren nicht notwendig!
Falls man Default-Implementierungen nutzt soll man dies begründen.So habe ich es implementiert ist dies korrekt?
class C { private: int iC_; } class B { private: int iB_; std::list<C*> CList_; public: B(std::list<C*> CList) : CList_(CList) { } } class A { private: int iA_; std::list<B*> BList_; public: A(std::list<B*> BList) : BList_(BList) { } A(const A& crA) { iA_ = crA.iA_; } }
Vielen Dank für eure Rückmeldungen
Edit:
Sollte ich es richtig verstanden haben dann könnte ich in diesem Fall ja den Default Copy Constructor verwenden?
Würde ich nun ein Pointer haben z.b in der A Klasse dann müsste ich selbst den Copy Constructor implementieren um eine tiefe Kopie zu erzeugen
D.hclass A { private: int iA_; std::list<B*> BList_; int* iPointer; public: A() { iPointer = new int; } A(std::list<B*> BList) : BList_(BList) { } A(const A& crA) { iA_ = crA.iA_; iPointer = new int; *iPointer = crA.iPointer; } ~A() { delete iPointer; } }
-
Hallo,
ist dir klar, was "tiefe Kopie" bedeutet? Ich glaube nicht:
"Tiefe Kopie" bedeutet hier, dass nicht nur die Zeiger in den Listen kopiert werden, sondern das das worauf gezeigt wird, kopiert wird. D.h. wenn du ein C-Objekt erzeugst und kopierst, dann sollten Änderungen an der Kopie keine Auswirkungen auf das Orginal haben.
Wo meinst du diese tiefe Kopie in deinem Code zu machen?Edit:
Ok, in deinem untern A machst du das ja zumindest. Worum nicht für B und warum nicht für alle list-items?