Verwaltung von Vektoren
-
Hallo Leute,
ich bin noch recht neu in der C++ Programmierung und habe mal eine Frage zur Strukturierung:
in einer Verwaltungsklasse ( A ) sind mehrere Vektoren mit Zeigern auf verschiedene andere Klassen ( B, C ,...) definiert.
Class B
{
...
}Class C
{
...
}Class A
{
vector<B *> list_b; // Liste von Zeigern auf Klasse B
vector<C *> list_c; // Liste von Zeigern auf Klasse C
...
}Die Vektoren sollen jetzt mit Hilfe diverser Funktionen (Hinzufügen, Lösche, Holen, Setzen usw.) manipuliert werden.
Meine Frage ist jetzt, wie man das am besten umsetzen sollte. Ich habe mal zwei Varianten versucht:Variante 1 - Manipulationfunktionen sind Member von Klasse A:
Class A
{
vector<B *> list_b; // Liste von Zeigern auf Klasse B
vector<C *> list_c; // Liste von Zeigern auf Klasse Cvoid Append ( B &b ); // füge B zu list_b hinzu
void Delete ( id ); // lösche objekt mit "id" aus list_b
...
}Variante 2 - Manipulationfunktionen sind Statische Member von Klasse B:
Class A
{
vector<B *> list_b; // Liste von Zeigern auf Klasse B
vector<C *> list_c; // Liste von Zeigern auf Klasse C}
Class B
{
static void Append ( vector<B *> listb, B &b ); // füge B zu listb hinzu
static void Delete ( vector<B *> listb, id ); // lösche objekt mit "id" aus listb}
in Variante 2 müsste man allerdings den Vektor aus Klasse A lesen um diesen dann an die jeweilige statische Funktion zu übergeben und danach zurückschreiben.
Grundsätzlich möchte ich vermeiden, das zu viele Funktionen in Klasse A hinein gestopft werden. Vielleich gibt es ja auch andere Lösungswege.
ich hoffe ich habe mich verständlich ausgedrückt.vielen Dank schon mal für jede Hilfe.
-
Gibt's einen tieferen Grund, hier überhaupt Pointer zu benutzen?
Die Variante 2 ist jedenfalls kompletter Unsinn. Eine Funktion die ein A-Objekt verändert hat gefälligst ein Member von A zu sein. Sonst müsstest du ja Klasse B ändern, wenn sich an den Interna von A etwas ändert. Gerade das will man doch vermeiden.
-
Wenn ich es mir recht überlege, nein es gibt keinen Grund Pointer einzusezten. Das kam wohl daher das ich neue Objekte mit "new" erstelle und den dabei zurückerhaltenen Zeiger in der Liste speichern wollte.
Die Variante 2. werden ich dann besser streichen.Danke für die Antwort.
-
Gibt's hier einen tieferen Grund, überhaupt new einzusetzen?
-
SeppJ schrieb:
Gibt's hier einen tieferen Grund, überhaupt new einzusetzen?
Nimms SeppJ nicht übel, er ist kein Freund von Zeigern

-
Die Zeigergeschichte kommt noch aus meiner "C" Vergangenheit. Da bin ich wohl geschädigt.
Vielleicht bin ich zu blöd (oder besser unwissend) aber wie anders als z.B. mit new würdest du dynamisch neue Instanzen einer Klasse erzeugen?
-
volli schrieb:
Vielleicht bin ich zu blöd (oder besser unwissend) aber wie anders als z.B. mit new würdest du dynamisch neue Instanzen einer Klasse erzeugen?
Man könnte sie zum Beispiel in einen std::vector oder sonstigen Container einfügen
.(Ja, der benutzt intern natürlich auch Zeiger, aber in der Regel besser als man das selber an einem Tag hinfrickeln kann und vor allem richtig und sicher)
-
Klasse kl; vector.push_back(kl) oder vector.push_back(Klasse());So?
-
Nymer_off schrieb:
Klasse kl; vector.push_back(kl) oder vector.push_back(Klasse());So?
vector.push_back(Klasse());Ist die richtige Variante
-
Ok, verstehe. Geht natürlich auch. Vorraussetzeung: im Vektor NICHT den Pointer auf das Objekt sichern

Danke