PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Object dynamisch initialisieren oder nicht?



dml
08-10-2009, 22:45
Hi,

ich habe mal eine Allgemeine (Grundkenntnisse) Frage an Euch.

Wenn ich zum Beispiel eine Klasse Mietauto habe. Sollte ich dann die jedes mal wenn sich der Fahrer ändert diesen mit mit new neu initalisieren oder jedes Mal aufwendig neu seine variablen umändern?
Wenn ich jedes mal seine Variablen(Name,Haarfarbe,Führescheinnr.,....) umändere kann es leicht passieren das etwas daneben geht.
Doch wenn ich ihn jedes mal neu initialisiere


Fahrer *fahrer;

MietAuto::neuerFahrer(){
Fahrer* neuerfahrer = new Fahrer("Gustav","schwarz","3b",...);
fahrer = &neuerfahrer;
}
weiß ich nicht wie ich ihn später korrekt Ansprechen kann?

MietAuto::haelt(){
fahrer->steigtaus();
}


Ich weiß, die Frage ist eine deutliche Anfängerfrage, doch ich weiß nicht wie ich dieses Problem am besten Löse
und wollte Euch deshalb um Hilfe bitten.

jeebee
09-10-2009, 08:52
Variante 1: Du erstellst eine Funktion Fahrer::update(...) welche als Argumente alle Eigenschaften erhält, welche dein Fahrer hat. Dann kannst du für jedes Mietauto einmal ein Fahrer-Objekt erstellen und dann jeweils mit update() die Werte ändern
MietAuto::neuerFahrer(){
fahrer->update("Gustav","schwarz","3b",...);
}
Variante 2: Du verwirfst das alte Fahrer-Objekt beim Fahrerwechsel
MietAuto::neuerFahrer(){
delete fahrer;
fahrer = new Fahrer("Gustav","schwarz","3b",...);
}
Variante 3: Du erstellst eine Liste von registrierten Autofahrern (je nach Anwendungsfall sinnvoll: z.B. Mietgesellschaft welche alle Mieter global registriert)
vector<Fahrer> Mieter;

MietAuto::neuerFahrer(){
Fahrer f = find(Mieter.Begin(), Mieter.End(), "Gustav-Id");
if(f == Mieter.End()) {
cout << "Gustav nicht gefunden";
// Fehler
}
fahrer = f;
}


Disclaimer: Keine Gewähr auf die C++-Syntax...

HTH
jeebee

dml
09-10-2009, 10:18
Cool danke!

hast mir wirklich geholfen, ich wusste nicht, ob man Variante 2 so wirklich auch
verwenden kann, oder ob später Speicherprobleme auftreten wurde.

anda_skoa
09-10-2009, 11:42
Alternativ kannst du Fahrer auch mit entsprechenden Zuweisungsoperator (und Copy constructor) ausstatten und dann eine permanent existierende Instanz überschreiben.

also in etwa


fahrer = Fahrer("Gustav", ...);

bzw. falls fahrer ein Pointer ist


*fahrer = Fahrer("Gustav", ...);


Allerdings ist es vermutlich nicht das Mietauto, dass das neue Fahrer Objekt erzeugt, sondern jemand außerhalb, der dass dann an Mietauto übergibt.

Ciao,
_

dml
10-10-2009, 11:05
Cool! Bald habe ich eine ganze MietAuto Armada und Hertz kann dicht machen. :rolleyes:

Vielen dank für den Tip, habe ich wieder etwas neues dazu gelernt.