von zwei klassen ableiten (war: Evi48)



  • 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...
    -junix

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



  • Der BCB6 sollte Mehrfachvererbung angeblich zumindest "teilweise" unterstützen. Ich weiss allerdings nicht, ob damit der in der Hilfe unter multiple inheritance beschriebene Einsatz von interfaces gemeint ist, was ja dortselbst nur als Workaround bezeichnet wird.

    Das nur so als Anmerkung; mir ist nicht entgangen, dass evi48 den BCB5 benutzt. 😉



  • Können einige hier nicht lesen:

    Ich habe geschrieben, das man von VCL oder MFC-Klassen nicht MEHRFACHVERERBEN kann. Einfache Vererbung (single inheritance) ist natürlich möglich und muß ja sogar sein.

    Natürlich kann man von einer Combobox erben oder von einem Dialog, sonst wäre ja das Framework sinnlos.

    Man kann aber nicht einfach gleichzeitig von einem Edit und einer Combobox erben.


Anmelden zum Antworten