von zwei klassen ableiten (war: Evi48)
-
Hallo,
ich möchte eine neue Klasse erstellen, die aber als Basisklassen TThread und TComponent hatz.B. Class MyClass : public TThread, TComponent
Danke
Evi48<edit>Bitte aussagekräftige Überschriften wählen! Danke.</edit>
[ Dieser Beitrag wurde am 10.07.2003 um 08:42 Uhr von junix editiert. ]
-
und wo ist da das problem??? du musst evtl. deine frage genauer formulieren... genau wie deine überschrift
-
bist du dir sicher das du das wirklich brauchst? mehrfachvererbung benutzt man eigentlich nur ganz ganz selten.
-
Meines Wissens geht das nicht, dass du von zwei klassen erben kannst. Ist aber grundsätzlich ein C++ problem, deshlab schieb ich dich auch mal da hin...
->Verschoben.
-
class MyClass : public TThread, public TComponent
sieht normaler aus, also von beiden öffentlich erben.
-
Original erstellt von junix:
**Meines Wissens geht das nicht, dass du von zwei klassen erben kannst.
**
-
Hallo,
so langsam schliesse ich mich der Meinung an "Das geht nicht". Da muss ich mir leider was anderes überlegen.Danke
Evi48
-
Ja was denn? (o: Dann gehts hald. Müsste aber in meinen Augen verboten sein. Ist ja für die Übersicht katastrophal...
-junix
-
Original erstellt von junix:
Ja was denn? (o: Dann gehts hald. Müsste aber in meinen Augen verboten sein. Ist ja für die Übersicht katastrophal...
-junixin java verbietet am alles, was einen durchschnittlichen programmierer überlasten könnte. in c++ soll es so verbote nicht geben. hat halt den vorteil, daß man so verrückte sachen zu not auch mal machen kann.
-
Die VCL Klasen sind in Objekt-Pascal sprich Delphi geschrieben. Ich meine gelesen zu haben, daß Delphi bisher keine Mehrfachvererbung unterstützt sondern erst ab Delphi .net. Vielleicht liegts ja daran
-
Kann mich mal einer aufklären was die Antworten jetzt sollen? Die Vorschläge habe ich getestet und auch das funktioniert nicht.
Evi48
-
Hallo Peter,
das kann natürlich sein. Ich benutze noch den Builder 5, der sicher noch nicht die Klassen von .net benutzt.Danke
Evi48
-
Also, es ist für VCL-Klassen (erkennbar am großen "T" im Namen) ebenso wie für MFC-Klassen (erkennbar am großen "C") verboten eine Mehrfachvererbung zu konstruieren.
C++ erlaubt das.
Die Framework-Klassen erlauben es nicht.
Punkt, aus, basta - an dem Punkt braucht Ihr nicht weiter diskutieren, das war eine Festlegung der Framework-Designer.
Du willst einen Komponente bilden, die einen Thread enthält? Dann ist die wesentliche Eigenschaft die Komponente, TComponent. Führe TThread dann als Membervariable von TComponent ein, also sowas:
class EviComponent : public TComponent { ... private: TThread* m_pTThread; // VCL-Klassen lassen sich nur über Zeiger // instanziieren };
Die notwendigen Methoden zur Steuerung des Threads mußt Du in der Komponentenklasse realisieren und an das TThread-Objekt durchreichen.
Das funzt ohne Probleme und löst Dein Problem vollständig.
[Willkommen in der wunderbaren Welt von C# und Java ohne Mehrfachvererbung.]
-
Hallo Marc++us,
vielen Dank für deine Info, ich werde das so machen.Evi48
-
Und wie verhindern die Framework-Klassen VCL und MFC Mehrfachvererbung?
-
Original erstellt von Marc++us:
[Willkommen in der wunderbaren Welt von C# und Java ohne Mehrfachvererbung.]blaue oder rote pille?
-
Original erstellt von Marc++us:
Also, es ist für VCL-Klassen (erkennbar am großen "T" im Namen) ebenso wie für MFC-Klassen (erkennbar am großen "C") verboten eine Mehrfachvererbung zu konstruieren.Das ist falsch. Ich habe schon mehrfach von MFC-Klassen abgeleitet. Z.B. von CMap und CMutex.
-
Original erstellt von <Frage>:
Und wie verhindern die Framework-Klassen VCL und MFC Mehrfachvererbung?Die verhindern das doch nicht. Du kannst z.B. von MyListItem und CComboBox erben. Das geht ohne Probleme und kann in einigen Fällen ziemlich nützlich sein.
EDIT: Hmmm, ich sollte vor dem Posten auch die 2. Seite lesen . über diesem Eintrag steht fast das gleiche...
[ Dieser Beitrag wurde am 10.07.2003 um 11:18 Uhr von MaSTaH editiert. ]
-
[ Dieser Beitrag wurde am 10.07.2003 um 11:21 Uhr von MaSTaH editiert. ]
-
Aber Marc++us hatte geschrieben:
Die Framework-Klassen erlauben es nicht.
-
Ich bin auch Fan von MehrfachVererbung ! (steinigt mich ! )
Ist manchmal echt nuetzlich, wenn man kleine oft verwendete kompontenten wie nen Puzzle zu ner komplex funktionierenden Klasse zusammenbauen kann.
Die meisten sagen dann zwar, statt Vererbung Aggregation nehmen, ich hab aber meist nie die Lust, Basisfunktionen der einzelnen Komponenenten per Hand durchzuschleifen ...Bei der MFC geht Mehrfachvererbung aber auch, nur machen meist Klasen Probleme, die in Ihrer eigenen VererbungsHirarchie nen gemeinsammen Perant haben ....
oder methoden virtuell doppelt definieren, das Bring definitiv probleme.Deshalb Mehrfachvererbung lieber nur bei eigenen Klassen einstzen, wo Weist was sie tun, wo sie herkommen, und welche methoden wer aufruft, ... oder prinzipiell in der ATL, da ist Mehrfachvererbung die Methode !
Ciao ....