klassen hierarchie mit vererbung sowie zugriff mit hilfe von zeigervariablen



  • hallo ich muss bis dienstag diese aufgabe machen:

    Es soll die Klassenhierarchie mit Vererbung sowie der Zugriff mit Hilfe von Zeigervariablen geübt werden.
    Als Anwendung dient die softwaremäßige Unterstützung (Simulation) einer Fernbedienung für ein „Smart House“, mittels derer man die Steuerung von elektrischen Haushaltsgeräten durchführen kann.
    Dazu entwerfe man eine Klassenhierarchie bestehend aus einer Basisklasse (Allgemeines Gerät = CDevice) und drei abgeleitete Subklassen (spezielle Geräte: Kaffeemaschine, Heizung, Radio).
    Neben den Konstruktoren sehe man die Methoden „Plus“ und „Minus“ zum Hoch- und
    Herunterregeln eines speziellen Attributs jedes Geräts vor (Kaffeemenge, Temperatur, Lautstärke) sowie eine einfache Ausgabe des Namens und des Zustandswertes des jeweiligen Objekts vor.

    Aufgabenstellung

    Das Programm soll zunächst im Konsolendialog die Tasten der Fernbedienung abfragen und die entsprechende Aktion auslösen.
    Dafür wird in dem Fernbedienungsobjekt die Methode des entsprechenden Device-Objekts aufgerufen.
    Es gibt eine Taste zum Weiterschalten des aktuellen Geräts (Mode), das per Zeigervariable auf das ausgewählte Gerät ausgewählt wird.

    Realisierung

    Mit der Kennzeichnung einer Methode als virtual Fkt = 0; teilt man dem Compiler mit, dass die Basisklasse keine Implementierung anbietet, jede vererbte Klasse die Methode aber implementieren muss. Man nennt diese Basisklasse eine ‘abstrakte Klasse‘. Von ihr können auch keine Objekte instanziiert werden. Außerdem sorgt die virtual-Deklaration dafür, dass per ‚late Binding‘ die Klassenfunktion des Objektes aufgerufen wird, auf die der Zeiger zeigt.

    Verwenden Sie die untenstehende Headerdatei “CDevice.h“
    #include <iostream>
    using namespace std;

    class CDevice // Basisklasse
    {
    public:
    virtual void mPlus()=0; virtual void mMinus()=0; virtual void mZustandsausgabe()=0; protected: int mInternerZustand;
    string mDeviceName;
    };

    class CFernbedienung:public CDevice
    {
    public:
    enum Mode {Kaffeemaschine, Radio, Heizung};
    CFernbedienung(CDevice * Dev1Ptr, CDevice * Dev2Ptr, CDevice * Dev3Ptr ); // hier werden die

    virtual void mPlus(); virtual void mMinus(); virtual void mZustandsausgabe(); void mModeChange(); private: //Adressen der Device-Objekte übergeben
    CDevice * mDevPtr; // dieser Zeiger zeigt auf das jeweils per Mode-Taste selektierte Objekt.
    // Damit können dann direkt dessen Funktionen aufgehoben werden.
    CDevice * mDev1Ptr; CDevice * mDev2Ptr;
    CDevice * mDev3Ptr; // hier werden die Adressen der Device-Objekte aufgehoben
    Mode mMode;

    };

    class CKaffemaschine:public CDevice
    {
    public: // hier wird der Status der Mode-Taste aufgehoben
    CKaffemaschine(int i); virtual void mPlus(); virtual void mMinus(); virtual void mZustandsausgabe();
    };

    class CRadio:public CDevice
    {
    public: // ctor mit Startwert
    CRadio(int i);
    virtual void mPlus(); virtual void mMinus(); virtual void mZustandsausgabe(); private:

    };

    class CHeizung:public CDevice
    {
    public: // ctor mit Startwert
    CHeizung(int i); // ctor mit Startwert
    virtual void mPlus(); virtual void mMinus();
    virtual void mZustandsausgabe();
    };

    ich habe die CDevice.cpp datei angefangen. kann mir jemand dabei helfen
    danke

    #include <iostream>
    #include "CDevice.h"

    using namespace std;

    CFernbedienung::CFernbedienung(CDevice * Dev1Ptr, CDevice * Dev2Ptr, CDevice * Dev3Ptr)
    {
    mDev1Ptr = Dev1Ptr;
    mDev2Ptr = Dev2Ptr;
    mDev3Ptr = Dev3Ptr;
    }

    void CFernbedienung::mPlus()
    {

    }

    void CFernbedienung::mMinus()
    {

    }

    void CFernbedienung::mZustandsausgabe()
    {

    }

    void CFernbedienung::mModeChange()
    {

    if (mMode == Kaffeemaschine)
    {
    CKaffemaschine a();
    mDev1Ptr = &a();
    }

    if (mMode == Radio)
    {
    CRadio b();
    mDev3Ptr = &b();
    }

    if (mMode == Heizung)
    {
    CHeizung c();
    mDev3Ptr = &c();
    }
    }
    //----------------------------------------------------
    CKaffemaschine::CKaffemaschine(int i)
    {
    mInternerZustand = i;
    }
    void CKaffemaschine::mPlus()
    {

    }

    void CKaffemaschine::mMinus()
    {

    }

    void CKaffemaschine::mZustandsausgabe()
    {

    }

    //----------------------------------------------------
    CRadio::CRadio(int i)
    {
    mInternerZustand = i;
    }

    void CRadio::mPlus()
    {

    }

    void CRadio::mMinus()
    {

    }

    void CRadio::mZustandsausgabe()
    {

    }

    //-------------------------------------------------------

    CHeizung::CHeizung(int i)
    {
    mInternerZustand = i;
    }

    void CHeizung::mPlus()
    {

    }

    void CHeizung::mMinus()
    {

    }

    void CHeizung::mZustandsausgabe()
    {

    }



  • Deine Frage ist jetzt "kann mir einer dabei helfen "?

    Du müsstest dann nur noch einen Preis nennen, dann wirst du bestimmt ins richtige Forum verschoben.



  • arti1012 schrieb:

    Mit der Kennzeichnung einer Methode als virtual Fkt = 0; teilt man dem Compiler mit, dass die Basisklasse keine Implementierung anbietet

    Das ist übrigens nicht richtig.


Log in to reply