HubertB
Bandbreitenverschwender
Wie schreibe ich einen Kopierkonstruktor für eine Klasse, die als Datenstruktur eine einfach verkettete Liste enthält? Der Standardkopierkonstruktor macht ja nur eine flache Kopie, ich brauch aber eine tiefe.
Hier meine interf.h
Die impl.cpp:
Die main.cpp:
Danke für eure Hilfe!
Hier meine interf.h
Code:
typedef int T;
class KSet
{
public:
//m1) Leere Menge
KSet();
//m2) Vereinigung zweier Mengen
void verein(KSet &M1, KSet &M2);
//m3) Element x hinzufügen
void hinzuf(T x);
//m4) i-tes Element der Menge lesen
T lesen(int i);
//m5) Element x löschen
void loeschen(T x);
//m6) Anzahl der Elemente
int anzahl();
//m7) Ist x Element der Menge?
bool ist(T x);
//m8) Anzeigen aller Elemente der Menge (<<)
friend ostream & operator<<(ostream & out, const KSet & s);
//m9) Konvertierung von einem Feld des Typs T nach KSet
void konvert(T* feld);
private:
struct node
{
T daten;
node* next;
};
node* anker;
bool isEmpty;
};
Die impl.cpp:
Code:
#include <iostream.h>
#include "interf.h"
//m1) Leere Menge
KSet::KSet()
{
anker=NULL;
isEmpty=true;
}
KSet::KSet(const KSet &rhs)
{
anker = new node;
*anker = *(rhs.anker);
}
//m3) Element x hinzufügen
void KSet::hinzuf(T x)
{
if(!ist(x))
{
if(isEmpty)
{
node* tmp=new node;
tmp->daten=x;
tmp->next=NULL;
anker=tmp;
isEmpty=false;
}
else
{
/*
//Anfügen als 2tes Element
node* tmp=new node;
tmp->daten=x;
tmp->next=anker->next;
anker->next=tmp;
*/
//Anfügen als letztes Element
node* last=anker;
for(last=anker; last->next!=NULL; last=last->next);
node* tmp=new node;
tmp->daten=x;
tmp->next=NULL;
last->next=tmp;
}
}
}
//m7) Ist x Element der Menge?
bool KSet::ist(T x)
{
for(node* i=anker; i!=NULL; i=i->next)
{
if(i->daten == x)
{
return true;
}
}
return false;
}
//m8) Anzeigen aller Elemente der Menge (<<)
ostream & operator<<(ostream & out, const KSet & s)
{
out << "[";
for(KSet::node *i=s.anker; i != NULL; i=i->next)
{
out << i->daten << " ";
}
out << "]";
return out;
}
Die main.cpp:
Code:
#include <iostream.h>
#include "interf.h"
int main(int argc, char* argv[])
{
//K4
KSet M1;
//K5
cout << "Alle Elemente von M1: " << M1 << endl;
//K6
M1.hinzuf(1);
M1.hinzuf(4);
M1.hinzuf(3);
M1.hinzuf(3);
//K7
KSet M2;
cout << "Alle Elemente von M2: " << M2 << endl;
//K8
KSet M3;
M3.verein(&M1, &M2);
cout << "Alle Elemente von M3: " << M3 << endl;
getchar();
return 0;
}
Danke für eure Hilfe!