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 dievirtual 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.