vererbung, oder ist das polymorphie?



  • Zu diesem Thema gibt es das hier:

    http://www.c-plusplus.net/forum/39457

    MfG,

    Probe-Nutzer



  • classlearning schrieb:

    mal eine andere frage, warum macht man denn sowas?
    welcher vorteil/anwendungsmöglichkeiten hat man davon?

    class1* pobj3;
    pobj3 = new class3();
    

    Gut dass du dich das fragst. Die Idee dahinter ist gut, die Ausführung ist schlecht. Die Idee ist, die Lebensdauer eines Objekts selbst bestimmen zu können. Das brauchst du, wenn du garantieren musst, dass ein Objekt über den Scope hinaus am Leben bleibt. Die Idee hat diejenige Person nun mit new umgesetzt. Das ist schlecht, da die Verwendung von new ein hohes Fehlerpotential hat. So solltest du den Code also nicht übernehmen. Wenn es gar nicht nötig ist, die Lebensdauer zu verlängern, dann erzeug das Objekt normal. Falls es doch nötig ist, nimm ein Smartpointer (unique oder shared), damit keine Fehler entstehen.



  • out schrieb:

    classlearning schrieb:

    mal eine andere frage, warum macht man denn sowas?
    welcher vorteil/anwendungsmöglichkeiten hat man davon?

    class1* pobj3;
    pobj3 = new class3();
    

    [...]
    Die Idee ist, die Lebensdauer eines Objekts selbst bestimmen zu können.
    [...]

    Es geht hier wohl eher um Polymorphie ...



  • hmm ne es geht um nen ftp zugriff...ich denke schon das es um die lebensdauer geht.

    was ist denn ein smartpointer?

    übrigens sehe ich im code nirgends das ein delete verwendet wird... also muss ich doch irgendwo speicherleaks haben?



  • bzw. in den destructoren werden die deletes teilweise benutzt, aber der destructor wird nciht explizit aufgerufen.
    werden die automatisch beim beenden aufgerufen?



  • Belli schrieb:

    out schrieb:

    classlearning schrieb:

    mal eine andere frage, warum macht man denn sowas?
    welcher vorteil/anwendungsmöglichkeiten hat man davon?

    class1* pobj3;
    pobj3 = new class3();
    

    [...]
    Die Idee ist, die Lebensdauer eines Objekts selbst bestimmen zu können.
    [...]

    Es geht hier wohl eher um Polymorphie ...

    sorry für post nr3 ich muss mich jetzt dann mal anmelden damit ich editieren kann.

    hmm warum sollte es darum gehen?
    ich mach doch polymorphie damit ein objektclass3 auf die variablen/funktionen von class2 und class1 zugreifen kann.

    aber wass des mit der laufzeit bringt check ich immer noch nicht... 🙂



  • hat wohl keiner mehr lust auf meine dummen fragen zu antworten? 🙂



  • Ich hab deine Fragen nicht ganz verstanden. Kannst du dein Anliegen konkretisieren?



  • ich mach doch polymorphie damit ein objektclass3 auf die variablen/funktionen von class2 und class1 zugreifen kann.

    Den Zugriff hast du auch bei ganz "normalen" Objekten von objektclass3 (es sei denn du erbst privat/protected oder "verschiebst" die Funktion in den nicht-oeffentlichen Bereich). Aber ich nehme mal an, du weisst noch gar nicht so recht, was Polymorphie ist ...

    Polymorphie kommt dir dann zu gute wenn du zur Kompilierzeit nicht weisst welchen abgeleiteten Typ einer Basisklasse du verwenden willst/wirst, sondern erst zur Laufzeit (beispielsweise weil es abhaengig von Benutzereingaben ist).

    Zum Beispiel:
    Du hast eine Basisklasse: Geometrie
    Und dazu einige abgeleiteten Klassen: Kreis , Rechteck , Dreieck etc., die alle von Geometrie erben.
    Jetzt nehmen wir mal an du hast eine Elementfunktion in Geometrie , die die Form z.B. auf den Bildschirm zeichnet.
    Dann kannst du einfach sowas machen:

    Geometrie *kreis = new Kreis(50);   // erstelle Kreis mit Radius 50
    kreis->Zeichne();
    

    (In diesem speziellen Fall waere es vermutlich auch sinnvoll Zeichne in Geometrie als abstrakte Funktion zu deklarieren)



  • classlearning schrieb:

    Belli schrieb:

    out schrieb:

    classlearning schrieb:

    mal eine andere frage, warum macht man denn sowas?
    welcher vorteil/anwendungsmöglichkeiten hat man davon?

    class1* pobj3;
    pobj3 = new class3();
    

    [...]
    Die Idee ist, die Lebensdauer eines Objekts selbst bestimmen zu können.
    [...]

    Es geht hier wohl eher um Polymorphie ...

    hmm warum sollte es darum gehen?

    Weil hier Zeiger auf class3 (die hoffentlich von class1 abgeleitet ist) in einem Zeiger auf ein class1-Objekt gespeichert wird.
    Außerdem geht es laut Thread - Thema um Vererbung und Polymorphie und nicht um den Sinn und Zweck von dynamischer Speicheranforderung.


Anmelden zum Antworten