PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Iterator-Definition?!?



Silver
29-10-2005, 14:19
Hallo Leute!

wir haben eine C++ Aufgabe bekommen, eine Linke Liste zu implementieren.
Die .h files waren schon vorgegeben (also Definition der Klassen, etc.)!

So, haben jetzt folgende Iterator Klasse bekommen:
<code>
class Biter
{
public:
Biter(BList& list); // das BList ist die eigentlich Linked Liste!
void SetContainer(BList& list);
void reset();
void next();
...
}
</code>

So, ok ich weiss was ein Iterator ist, und auch wie ich ihn programmieren muss, aber
wo speichere in dieser Klasse bitte mein BList-Objekt? Ist, dass so
möglich wie oben beschrieben, das zu machen?
Kenn mich mit Referenzen nicht so gut aus!

Oder hat sich der Professor vertan und es gehört so?
<code>
class Biter
{
private:
BList* liste;
public:
...
}
</code>

mfG
Matthias

locus vivendi
29-10-2005, 14:36
Das sind jetzt viele Fragen bzw. Themen auf einmal. Also erstmal würde ich sagen, dass die Vorgabe kein Iterator im Sinne der C++-Standardbibliothek ist. Eure Vorgabe orientiert sich eher an Java. Persönlich hätte ich es schöner gefunden, wenn euer Lehrer sich an den Standard angelehnt hätte. So wie die Vorgabe ist, müsste der Lehrer eigentlich auch Vorgegeben haben, welche Semantik die gezeigten Funktionen einzuhalten haben. Ohne dies zu wissen kann man nicht genau sagen wie die Klasse implementiert werden kann. Man kann aber vermuten dass es in jedem Fall einfach ausreicht, eine Referenz oder einen Zeiger auf das "BList"-Objekt zu speichern. Nun ist mir nicht ganz klar, warum du nicht nur einen Verweis, sondern ein ganzes BList-Objekt speichern willst. Wenn du das erläutern könntest, könnte ich dir vielleicht weiterhelfen.



Oder hat sich der Professor vertan und es gehört so?
<code>
class Biter
{
private:
BList* liste;
public:
...
}
</code>
Dieser und der andere Codeschnippsel schließen sich nicht aus.

Silver
29-10-2005, 18:29
Nun ist mir nicht ganz klar, warum du nicht nur einen Verweis, sondern ein ganzes BList-Objekt speichern willst. Wenn du das erläutern könntest, könnte ich dir vielleicht weiterhelfen.

Hallo!

Ja, aber wie kann ich denn einen Verweis speichern?! Verweise kann ich ja nur bei der Definition anlegen, und nicht zB erst im Konstruktor wo er mir übergeben wird (oder bei SetContainer() ).

Wenn mir jetzt das BList als Verweis übergeben wird (zB im Konstruktor von Biter), dann kann ich ja diesen Verweis nicht in den anderen Methoden (zB current(), next(), etc.) verwenden, da er ja nur in der sich übergebenden Methode zur Verfügung steht und nicht als Klassenattribut!

mfG
Matthias

PS: Ich hoffe ihr versteht mich!

Joghurt
29-10-2005, 20:34
Zwei Möglichkeiten:
a) Nicht referenz, sondern Pointer speichern:

class Biter
{
private:
Blist* list;
public:
Biter(Blist& lst) { list = &lst; }
}
b) Referenz im Constructor initialiseren

class Biter
{
private:
Blist& list;
public:
Biter(Blist& lst) : list(lst) {}
}HTH