frage zu vererbungsproblem



  • ich habe da folgendes problem, ein beispiel:

    es existiere eine Klasse CX_A.
    Von dieser gibt es nun zwei Unterklassen CX_B und CX_C.

    Nun habe ich eine weitere Klasse CY_Test, dessen Konstruktor
    ein CX_A Objekt uebergeben bekommt (siehe oben), d.h. ich kann ihm auch ein
    CX_B oder ein CX_C Objekt uebergeben.

    Mein Problem ist nun folgendes: obiger klassenentwurf ist mir vorgelegt worden(habe ich nicht selber geschrieben). Ich habe lediglich CX_C mit einer weiteren methode bestueckt, die die basisklasse CX_A nicht hat.

    an einer bestimmten programmstelle ist mir aufgefallen, dass ich genau diese spezielle methode aufrufen muss, aber CY_Test kennt das Objekt dass ihm im Konstruktor uebergeben wurde nur als CX_A Objekt und folglich meckert mein compiler.

    Kann ich hier einfach auf ein CX_C casten oder ist das ein entwurfsfehler oder was!?!?!

    Vielen dank.



  • peperony schrieb:

    Kann ich hier einfach auf ein CX_C casten oder ist das ein entwurfsfehler oder was!?!?!

    Beides ist möglich.

    Bye, TGGC (Denken, und gut ist.)



  • da du die Oberklassen nicht verändern kannst (nehm ich mal an), musst dus wohl so machen, oder du schreibst sowas:

    class Name
    {
    public:
    Name(A* ptr);
    name(C* ptr);
    };
    


  • Hi,

    Du kannst jetzt verschieden vorgehen. Entweder, die Basisklasse deklariert die Methode bereits virtuell, sodass du sie auch von dort aufrufen kannst oder du musst casten. So ein cast kann via dynamic_cast gemacht werden, das ist aber nicht gerade schön.
    Überdenke lieber dein Konzept, Glamdrings Möglichkeit ist IMHO auch nicht sonderlich schön.

    MfG Eisflamme



  • class Name
    {
    public:
    Name(A* ptr);
    name(C* ptr);
    };
    

    und was ist, wenn ich C über eine Fabrik erstelle, die nur A* zurückgibt? dann hilft mir der zweite ctor garnicht.

    es gibt mehrere ansätze:
    1. ein anderes design(beste lösung)
    2. dynamic_cast(schlecht)
    3. eines der vielen frameworks benutzen, die jeder Klasse einen unique integer wert zuordnen können. nachteil: du musst alle Klassen der vererbungshierarchi inklusive A verändern(viel arbeit, aber lohnt sich manchmal)


Anmelden zum Antworten