tiefe kopie einer liste mittels kopierkonstruktor
-
hallo,
ich habe hier eine klasse produktionsliste:struct Element { char datum[11]; unsigned int tagesproduktion; Element* next; void setValues(char* datum, unsigned int tagesprod); int printItem(); }; class Produktionsliste { private: Element* first; Element* last; public: Produktionsliste(); Produktionsliste(char* datum, int tagesprod); Produktionsliste(const Produktionsliste &a); void init(); ~Produktionsliste(); //methoden typedef int (*ItemFunction)(struct Element*); void insert(int prod, char* data); void print(); int clear(Produktionsliste* l); int removeElements(int val); int forall(ItemFunction exec); };beim kopierkonstruktor hab ich aber ein verständnisproblem.
dazu habe ich mir gedacht, dass ich die liste durch gehe und jedes element
in eine neue liste eintrage. wenn ich nur die zeiger auf das erste und letzte element
setzen würde, hätte ich ja nicht die liste kopiert, sondern nur eine "flache" kopie.
mir ist klar, dass ich mit dem kopierkonstruktor ein objekt erzeuge, was eine kopie von einer konstanten referenz eines anderen objekts ist. wenn ich aber die elemente, in eine liste einfügen möchte, die ich mir erst beim aufruf des konstruktors erzeuge, komm ich da zu einem problem?!
gibt es da eine möglichkeit trotzdem den kopierkonstruktor zu benutzten?
hab ich irgendwo einen denkfehler?dazu hab ich mir sowas überlegt, was mir aber eigentlich unlogisch erscheint:
Produktionsliste::Produktionsliste(const Produktionsliste &a) { Produktionsliste* l; while(first!= NULL) { l.insert(first->tagesproduktion,first->datum); first = first->next; } }gruss
pete
-
wenn ich im kopierkonstruktor einfach das objekt Produktionsliste* l weglasse,
geht es... dachte, ich muss die methode insert(...) mit einem objekt vorne dran aufrufen?!
dachte immer, das solche objektmethoden ohne eine objekt der klasse nicht funtkionieren???tut mir leid, für den vorschnellen post

-
Innerhalb einer nicht-statischen Memberfunktion (z.B. einem Konstruktor) wird ein Verweis auf ein nicht-statisches Member member dieser Klasse ohne Verwendung von . oder -> implizit als this->member angesehen.
-
ok danke für die fixe hilfe!

Produktionsliste::Produktionsliste(const Produktionsliste &a) { while(first!= NULL) { this->insert(first->tagesproduktion,first->datum); first = first->next; } }