Klassen ableiten
-
Hallo!
Ich brauche mal wieder ein wenig Hilfe. Es gibt folgendes Problem.
Ich habe eine Klasse (class connect) geschrieben und von einer anderen Klasse (class serial)abgeleitet. Es handelt sich um eine Verbindung über die serielle Schnittstelle. Nun möchte ich aber über eine Auswahl meine Klasse (class connect) von einer dritten Klasse (class network) ableiten und eine Verbindung über Netztwerk nutzen. Wie kann ich dass machen? Hier nochmal als Code:bei Auswahl von serieller Schnittstelle:
class connect : public serial{};oder bei Auswahl von Netzwerk:
class connect : public network{};Danke für die Hilfe :xmas1:
-
Hallo Steffi77,
zu dem Thema Mehfachableitung findest du unter den FAQs:
http://www.c-plusplus.net/forum/viewtopic.php?t=70495&highlight=klasse+ableiten einen Beitrag der dir eventuell weiterhilft.Viel Erfolg
Evi48
-
Danke für den Hinweis, aber es sollte keine Mehrfachvererbung sein sondern entweder von der einen (class serial)oder von der anderen (class network)Klasse abgeleitet werden. Da ich in beiden Klassen Funktionen mit den gleichen Namen habe kommt es sonst zu Konflikten.
-
Hallo,
ich denke dann ist dein Codeclass connect : public network{};bereits richtig
Evi48
-
Ich kann mir nicht vorstellen, dass sowas zur Laufzeit geht.
Vielleicht musst Du auch die Sache umgekehrt angehen:class serial : public connect{}; class network : public connect{};Oder Du hast eine Eigenschaft, über die Du den entsprechenden Typ einstellen kannst.
Dann könntest Du intern Referenzen auf die entsprechenden Klassen halten.
In etwa so:// Header typedef enum {ctUnknown, ctSerial, ctNetwork} TConnectionType; class connect { public: connect(); __property TConnectionType ConnectionType = {read=FConnectionType, write=setConnectionType}; private: TConnectionType FConnectionType; serial FSerial; network FNetwork; void setConnectionType(TConnectionType Value); } // cpp connect::connect() { FConnectionType = ctUnknown; FSerial = 0; FNetwork = 0; } void connect::setConnectionType(TConnectionType Value) { if (Value != FConnectionType) { delete FSerial; FSerial = 0; delete FNetwork; FNetwork = 0; FConnectionType = Value; if (FConnetionType == ctSerial) { FSerial = new serial(); } else if (FConnectionType == ctNetwork) { FNetwork = new network(); } } }Dann musst Du allerdings bei jedem Zugriff auf die Membervariablen FSerial bzw. FNetwork vorher den aktuellen Typ abprüfen.
Einfacher wäre es sicherlich mit der oben gezeigten Vererbung.
Gruß,
Alexander
-
Ja hallo,
auf den Gedanken, daß du das zur Laufzeit machen möchtest bin ich nicht gekommen. Da hat Alexander sicher Recht du muß die Klassen umdrehen. Oder aber du machst aus "serial und network" je ein unabhängiges Obejkt, dass du aus Connect aufrufst.Evi48
-
Ja das Ganze soll natürlich zur Laufzeit geschehen. Das Problem ist nur, dass es die Klasse (class connect:public serial{};) schon gibt.
Vielleicht kann man ja auch mit Zeigern arbeiten. Wenn zB Netzwerkverbindung steht dann mit connect:network arbeiten und umgedreht.