Mehrfachvererbung einer Klasse in die selbe andere Klasse usw....
-
Hi Leute!
Hab mir grad für ein Projekt eine Klasse TRelais geschrieben (dort sind alle eigenschaften die ich eben für meine Relais brauche drin).
Als nächstes Habe ich eine Klasse TMischer (ist eigentlich nix anderes als TRelais, nur dass eben 2 Relais gebraucht werden ein "auf" und ein "zu" Relais. Diese steuern den Öffnungswinkel des Mischers welcher dann das Warmwasser temperiert usw.....)Ich hab nun das Problem, dass ich nicht so recht weis wie ich diese "Vererbung" oder den Zugriff auf TRelais schreiben soll, da ich zum einen noch eine Unit Control.cpp habe die dann nur noch die in den Klassen befindlichen "void Control (void)" aufruft, in welcher dann wiederum die Steuerung, bei welcher Temperatur der Mischer wie weit öffnen muss usw. drin ist.
Übrigends TRelais wird noch für Pumpen, Kesselansteuerung (jeweils nur 1 Relais) gebraucht.
Danke für konstruktive Hilfe
mfg
Tom
-
Wieso muss mischer von relais abgeleitet sein? Mischer kann Relais (und zwar nen öffner und nen schliesser) ja auch als privates Element besitzen. Als Interface stellt der Mischer dann die Funktionen die man von einem Mischer erwartet zur Verfügung. Im Rahmen dieser Funktionen greifst du dann entsprechend auf die Relais zu.
-
ja das schon, so hatt ich's auch schon nur dann muss ich ja in Mischer drin
Auf=new TRelais(......);
haben und das will ich in der Klasse vermeiden.Oder geht es auch ohne dass ich in Mischer ein new TRelais mache???
-
Wieso willst du deine TRelais-Variablen unbedingt dynamisch erstellen.
EinfachTRelais rel1, rel2;. Die Initialisierung dann im Konstruktor von TMischer oder über Memberfunktionen.
-
Weil ich jetzt noch nicht genau weis wie viele Mischer letztendlich im Projekt sind, deshalb will ich das ganze so dynamisch wie möglich haben.
-
Du hast aber oben geschrieben, dass ein TMischer zwei TRelais enthält. Die Anzahl der TMischer-Instanzen spielt doch da keine Rolle. Hier kannst du dann ja immernoch mit new arbeiten (oder std::vector).
-
in der Code.cpp steht:
[cpp] char* cMText[VARIABLES]={"°C Sollwert bei T8", "", "", "", "", "", "", "Sekunden Mischerlaufzeit für 90°", "", "", "Zwangsstellung Auf", "", "", ""}; float fMValue[VALUES]={20,0,0,0,0,0,0,140,0,0}; bool bMSwitch[SWITCHES]={false, false, false, false}; Auf=new TRelais("M1-Auf", "öffnet den Mischer",cMText, fMValue, bMSwitch, 0, 15); Zu=new TRelais("M1-Zu", "schließt den Mischer",cMText, fMValue, bMSwitch, 0, 16); Mischer=new TMischer(Auf, Zu); [/cpp]in der TMischer steht:
[cpp] TMischer::TMischer(TRelais* Auf, TRelais* Zu){ Opn=Auf; Cls=Zu; } [/cpp]
-
Braunstein schrieb:
Du hast aber oben geschrieben, dass ein TMischer zwei TRelais enthält. Die Anzahl der TMischer-Instanzen spielt doch da keine Rolle. Hier kannst du dann ja immernoch mit new arbeiten (oder std::vector).
Das schon nur weiß ich nicht ob die Relais die dann im Mischer sind die gleiche VariableList usw. haben und so, wie ich 's nun hab müsste es doch eigentlich passen oda????
Denn nun kann ich für jedes TMischer Element die TRelais variabel erstellen so wie ich's brauch.
-
...und wieso nochmal erstellst du die Relais nicht einfach im Konstruktor?
-
weil ich dann einen Namen, die ganzen Zustände wann was wie geschaltet wird, den default Wert usw. in der Klasse habe und ich das vermeiden möchte. Da ich diese Klasse für später auch verwenden will und nicht jedesmal die VariableList angleichen will (die übrigends nie gleich ist)
-
Aber sauber wäre doch da dem Mischer mitzuteilen, was geschaltet wird und der teilt es dann den entsprechenden relais mit?
-
junix schrieb:
Aber sauber wäre doch da dem Mischer mitzuteilen, was geschaltet wird und der teilt es dann den entsprechenden relais mit?
das mach ich doch jetzt eh, indem ich mir in der Code meine beliebigen Relais definiere und dann ruf ich die TMischer::Control auf und die sagt dann welches Relais wann geschaltet wird. Oder versteh ich jetzt etwas nicht richtig???
-
Es gibt 2 Betrachtungsweisen. Zum Einen der Design aus Applikationssicht (also dem Teil Software der den Mischer verwendet) zum Anderen der Design innerhalb des Mischers.
Ich hatte nun den Gedanken gehegt, das die Applikation nur den Mischer sieht und der Mischer von der Applikation die Ziele zugewiesen bekommt, was er zu mischen hat. Der Mischer selbst gibt dann diese Informationen an das Relais oder ggf. eben auch ein anderes Objekt weiter.
-
wenn ich deine Betrachtungsweise richtig versteh, dann war das genau so wie ich's ursprünglich hatte.
Ich wollte es nun aber anders haben, denn die Relais werden auch noch von anderen verwendet, da auch Pumpen usw. im Programm sind die nur 1 Relais benötigen.
Deshalb wars mir lieber wenn ich die Relais erstelle und dann an den Mischer weitergebe.
-
Aber es werden doch nicht die selben Relais verwendet?
-
nein das nicht, aber für mehrere Mischer gibt es je Mischer 2 Relais und für jedes Relais gibt es eine vom Mischer bereitgestellte VariableList, welche ich ja irgendwo mal initialisieren muss und da hab ich nun die Relais eben in die Code.cpp gepackt und ruf nun auch dort die TMischer::Control auf. Funkt eigentlich ganz gut so, zumindest bis jetzt.
Warum, auf was willst du hinaus??
-
Das die Relais ja nur von einem Mischer verwendet werden und daher keine Veranlassung besteht, das der rest der Applikation die Relais die hinter dem Mischer stecken kennt?
-
junix schrieb:
Das die Relais ja nur von einem Mischer verwendet werden und daher keine Veranlassung besteht, das der rest der Applikation die Relais die hinter dem Mischer stecken kennt?
Die muss er aber kennen, denn und das kannst du nicht wissen, auch die Belegung der Relais auf einer der 5 Platinen ist variabel und deshalb muss ich wissen wo die Relais für den Mischer sind und dass sie da sind
-
Aha ok. da dämmert mir einiges (o;
-
ok, das heißt also dass es doch so passt wie ich's hab oder????
sorry das ich das vorher nicht erwähnt hab :p
Danke aber trotzdem für die Hilfe...
mfg
Tom