"Hat ein"-Beziehung



  • Ich hab wiedermal ne kleine Frage bzw ein Problem.
    Hab schon fleißig das netz durchsucht aber kein mir einleuchtendes Beispiel für eine "Hat-ein"-Beziehung gefunden, glaube man spricht auch von Aggregation:
    Nun vielleicht kann jemand erklären, wie man diese in c++ um setzt, z.B angenommen
    man nehme eine class Haus und bekanntlich "hat ein" Haus ja eine Tür.Läuft das wie bei ist ein, also Vererbung.

    ...class haus {};

    class Tuer:public Haus {};

    ????
    Danke schonmal für eure Bemühungen



  • Das was du meinst ist Vererbung

    Auch gut zu finden unter dem Stichwort

    UML

    Da kannst dich tot beziehen

    Ausserdem gehört das wirklich nicht ins MFC Forum 😡

    beim nächsten mal kurz üerlegen wo es reingehör (steht ja unten dran bei den Ruriken als beschreibung )
    wenn das nächste mal besser postest helft man dir eher
    Aber ok, will ja kein .... sein

    suche mal unter

    google.de

    Achtung suchegriff

    "ist ein" Vererbung



  • class Tuer
    {
    };
    
    class Haus
    {
    private:
        Tuer tuer_;
    };
    


  • Entschuldigung und vielen Dank nochmals für die schnelle Hilfe



  • sorry

    klar

    nicht in google nach "ist ein" sonder "hat ein" suchen
    sorry
    sind ja 2 paar stifel



  • Dieser Thread wurde von Moderator/in dEUs aus dem Forum MFC mit dem Visual C++ in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • http://www.lmtm.de/InformatiXTM/umljava/texte/assoziation.html
    schau dir auch noch die unterschiede zwischen aggregation, komposition und assoziation als drüber an.



  • Flaah schrieb:

    Ich hab wiedermal ne kleine Frage bzw ein Problem.
    Hab schon fleißig das netz durchsucht aber kein mir einleuchtendes Beispiel für eine "Hat-ein"-Beziehung gefunden, glaube man spricht auch von Aggregation:
    Nun vielleicht kann jemand erklären, wie man diese in c++ um setzt, z.B angenommen
    man nehme eine class Haus und bekanntlich "hat ein" Haus ja eine Tür.Läuft das wie bei ist ein, also Vererbung.

    ...class haus {};

    class Tuer:public Haus {};

    ????
    Danke schonmal für eure Bemühungen

    "Hat-ein"-Beziehungen sind Aggregationen das ist richtig.

    Was du beschrieben hast ist eine "Ist-ein"-Beziehung. Wobei das auch noch falschrum beschrieben wurde.

    Eine Tür ist zwar ein Teil eines Hauses aber es ist kein Haus. Daher müsstest du es wenn schon anders herum machen ( class Haus : public Tuer ), was wiederum auch falsch wäre, weil ein Haus keine Tuer ist. 🤡

    Die "Hat ein"-Beziehung bedeutet das die Klasse einen Member.

    class Tuer
    {
     //...
    };
    
    // class Haus hat eine Tuer ->
    class Haus
    {
        Tuer haustuer;
      public:
      //...
    };
    

    Ich hoffe das hast du jetzt verstanden.

    MfG



  • Statt Layering kann man in bestimmten Fällen auch private Vererbung benutzen. Nach Meyers sollte man private Vererbung immer dann benutzen, wenn keine "Ist-Ein-Beziehung" vorliegt und man lediglich auf den Code der Basisklasse zugreifen will.

    Mir fällt aber gerade auf, dass das mit Haus und Tür weniger viel zu tun hat :xmas2:.



  • simon.phoenix schrieb:

    Statt Layering kann man in bestimmten Fällen auch private Vererbung benutzen. Nach Meyers sollte man private Vererbung immer dann benutzen, wenn keine "Ist-Ein-Beziehung" vorliegt und man lediglich auf den Code der Basisklasse zugreifen will.

    Ne, nur wenn man virtuelle Methoden überschreiben will. Sonst ist Layering idR besser.




Anmelden zum Antworten