Anzeige:
Ergebnis 1 bis 5 von 5

Thema: Object dynamisch initialisieren oder nicht?

  1. #1
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177

    Object dynamisch initialisieren oder nicht?

    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

    Code:
    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.

  2. #2
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    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
    Code:
    MietAuto::neuerFahrer(){
       fahrer->update("Gustav","schwarz","3b",...);
    }
    Variante 2: Du verwirfst das alte Fahrer-Objekt beim Fahrerwechsel
    Code:
    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)
    Code:
    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
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    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.

  4. #4
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Alternativ kannst du Fahrer auch mit entsprechenden Zuweisungsoperator (und Copy constructor) ausstatten und dann eine permanent existierende Instanz überschreiben.

    also in etwa
    Code:
    fahrer = Fahrer("Gustav", ...);
    bzw. falls fahrer ein Pointer ist
    Code:
    *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,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  5. #5
    Registrierter Benutzer
    Registriert seit
    02.08.2008
    Beiträge
    177
    Cool! Bald habe ich eine ganze MietAuto Armada und Hertz kann dicht machen.

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

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •