Ich versuche, 2 Listen zu lesen und verketten sie überladen + Operator. Ich bin ziemlich neu in den Klassen, also bitte habe Geduld mit mir, alles was ich will, ist zu lernen. Ich habe die Stream-Operatoren überlastet, damit ich die Objekte normal und umgekehrt lesen und schreiben kann. My + -Operator verkettet die Listen, aber die Probleme scheinen in main zu sein (list1 = list1 + list2; oder list3 - nach Verkettung von list1 und list2). Ich suchte fast überall im Internet nach einer Antwort und beendete das Posting. Wenn Sie Links oder Tutorials haben, die mich schneller und einfacher wachsen lassen, bin ich offen für neue Ideen. Vielen viel für das Lesen und tryng zu ^^Überladen + Operator zum Verketten von 2 doppelten Listen
Knotenklasse helfen:
class nod
{
public:
int data;
nod *next;
nod *prev;
friend class Lista;
nod();
};
Liste Klasse
class Lista
{
private:
nod *head;
nod *tail;
int size;
public:
Lista();
~Lista();
friend istream &operator >>(istream &input, Lista &a)
{
int i;
cout << "Size of the list: ";
input >> a.size;
nod *q = new nod;
q->prev = NULL;
cout << "\nFrist node: ";
input >> q->data;
a.head = q;
a.tail = a.head;
for (i = 1; i < a.size; i++)
{
nod *q = new nod;
cout << "\nNode number " << i + 1 << " is: ";
input >> q->data;
a.tail->next = q;
q->prev = a.tail;
a.tail = q;
a.tail->next = NULL;
}
return input;
}
friend ostream& operator <<(ostream &output, Lista &a)
{
output << "\n\nNormal writing: ";
nod *q = new nod;
q = a.head;
while (q != NULL)
{
output << q->data << " ";
q = q->next;
}
q = a.tail;
output << "\n\nReverse writing: ";
while (q != NULL)
{
output << q->data << " ";
q = q->prev;
}
return output;
}
Lista &operator+(Lista &rec)
{
Lista temp;
temp.head = head;
temp.tail = tail;
temp.tail->next = rec.head;
rec.head->prev = temp.tail;
temp.tail = rec.tail;
temp.size = size;
temp.size = temp.size + rec.size;
return temp;
}
};
Main:
int main()
{
Lista a,b,c;
cin>>a;
cin>>b;
c=a+b;
cout<<c;
return 0;
}
Du verfolgst nicht [der Regel von 3] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three) . Sie können möglicherweise nichts mit 'operator +' anfangen, bis Sie einen benutzerdefinierten Kopierkonstruktor schreiben. Auch diese Art der Codierung ist nicht für Anfänger, sondern für erfahrene C++ - Programmierer. Ich muss noch sehen, dass ein Anfänger das richtig macht, ohne dass ein erfahrener Programmierer das Ganze für sie geschrieben hat. – PaulMcKenzie
Also wenn ich "c = a + b" verwenden möchte, muss ich auch den = Operator überladen? –
Sie müssen die Regel von 3 befolgen. Das heißt, Sie müssen den Kopierkonstruktor, den Zuweisungsoperator und den Destruktor implementieren, * und sie müssen korrekt arbeiten *. Was Sie bereits programmiert haben, gibt es viele Dinge, die anders gemacht werden sollten - was ist, wenn ich ein Element zur Liste hinzufügen möchte, und ich möchte keinen Stream verwenden? Wie mein erster Kommentar andeutet, wird dies zu mir oder einem anderen SO-Mitglied, das Sie entweder zum bereits geschriebenen Code führt, oder wir schreiben das Ganze selbst, um Ihnen zu zeigen, wie Sie das richtig machen. Ein Anfänger * nie * bekommt das richtig, glaub mir. – PaulMcKenzie