abstrakte Class



  • Hi,

    hab folgendes Problem:

    class A : public B
    {
    protected:
       CByteArray my_array;
       virtual void ProcessReceive(CByteArray &) PURE; 
    }
    
    class C : public A
    {
    }
    
    class D : public A
    {
    public:
       D();
       virtual ~D();
    
    protected: 
       virtual void ProcessReceive(CByteArray &data);
    }
    
    class X : public Y
    {
    protected:
       virtual A *GetMember() { return &member; }    //<- classA 
       classB m_array2;                          //<- fehlermeldung
    }
    

    Jetzt bekomm ich die Fehlermeldung, dass Class B eine abstrakte Class darstellt und deshalb keine Member aufweisen darf. Wie kann ich das umgehen?

    Gruß
    Konrad



  • Die virtuelle Funktion implementieren, oder nur einen Zeiger auf Klasse B nutzen.



  • Janjan schrieb:

    Die virtuelle Funktion implementieren, oder nur einen Zeiger auf Klasse B nutzen.

    d.h. die Funktion in ClassA definieren;

    gibt es eine Möglichkeit trotzdem von ClassA zu ClassD zu kommen über einen Funktonsaufruf?



  • Oder die Funktion in Klasse B definieren.

    Du kannst abstrakte Klassen nur für Zeiger nutzen.

    Und wenn du von ClassA zu ClassD willst, dann hast du in der Regel ein kaputtes/schlechtes Design. Das würde aber mit einem Downcast funktionieren... sofern es sich um ein Objekt der Klasse D handelt.


Anmelden zum Antworten