Hallo zusammen,
ich habe mal wieder eine Frage diesmal bezüglich C++
Wollte mir eine Klasse schreiben die eine Liste repräsentiert.
Das ganze sieht bis jetzt wie folgt aus:
Liste.h
Nun scheitere ich am Kopier-Konstruktor in C++!!!
Finde das in C++ auch extrem SCHWER Gegensatz zu Java!
Vielleicht kann mir dabei ja jemand helfen?
Hier mal meine Liste.cpp:
Der Kopier- Konstruktor soll doch ein neues Objekt erschaffen das die selben Daten hat wie mein als Parameter übergebenes Objekt.
Ich verstehe nur gerade überhaupt nicht wie ich das so machen soll
Start ist ein Pointer auf ein Object vom Typ Node. Wie bekomme ich diesen denn gefühlt?
Hab es wie oben mit einer insert Methode versucht die ich auch der Klasse zur Verfügung stelle. Doch so klappt es nicht da mekert schon der Compiler!
Hier die insert Methode:
ich habe mal wieder eine Frage diesmal bezüglich C++
Wollte mir eine Klasse schreiben die eine Liste repräsentiert.
Das ganze sieht bis jetzt wie folgt aus:
Liste.h
C++:
class Liste {
class Node {
public:
int value;
Node *next;
Node *prev;
Node(int value = 0, Node *next = nullptr, Node *prev = nullptr);
};
Node *start;
public:
Liste();
Liste(int value);
Liste(const Liste &l); //Kopier Konstruktor
Liste(Liste &&l); //Verschiebe Konstruktor
~Liste();
Liste &operator=(const Liste &original);
Liste &operator=(Liste &&l);
};
Nun scheitere ich am Kopier-Konstruktor in C++!!!
Finde das in C++ auch extrem SCHWER Gegensatz zu Java!
Vielleicht kann mir dabei ja jemand helfen?
Hier mal meine Liste.cpp:
Code:
#include <iostream>
#include "Liste.h"
using namespace std;
Liste::Node::Node(int value, Node* next, Node* prev) :
value(value), next(next), prev(prev) {
}
void Liste::Node::setNext(Node* next) {
this->next = next;
}
Liste::Node* Liste::Node::getNext() {
return next;
}
int Liste::Node::getValue() {
return value;
}
void Liste::Node::setValue(int value) {
this->value = value;
}
void Liste::Node::printNode() {
cout << value << endl;
}
Liste::Liste() :
start(nullptr) {
}
Liste::Liste(int value) {
Liste::Node *n = new Liste::Node;
n->value = value;
start = n;
}
//Kopier Konstruktor
Liste::Liste(const Liste &l) {
Node *tmp = l.start;
while (tmp != nullptr) {
this->start = insert(tmp->value);
tmp = tmp->next;
}
}
//Verschiebe Konstruktor
Liste::Liste(Liste &&l) {
}
Liste::~Liste() {
}
Der Kopier- Konstruktor soll doch ein neues Objekt erschaffen das die selben Daten hat wie mein als Parameter übergebenes Objekt.
Ich verstehe nur gerade überhaupt nicht wie ich das so machen soll
Hab es wie oben mit einer insert Methode versucht die ich auch der Klasse zur Verfügung stelle. Doch so klappt es nicht da mekert schon der Compiler!
Hier die insert Methode:
C++:
void Liste::recInsert(Liste::Node *s, Liste::Node *n) {
if (s->next == nullptr)
s->next = n;
else
recInsert(s->next, n);
}
void Liste::insert(int value) {
Liste::Node *n = new Liste::Node { value };
if (start == nullptr)
start = n;
else
Liste::recInsert(start, n);
}