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->*C

    A: Enthält nur -iA_ : int
    B: Enthält nur -iB_ : int
    C: Enthält nur -IC_: int

    Die 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.h

    class 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?


Anmelden zum Antworten