eine frage zur Vererbung(?)



  • also,ich weis nich, ob man das so machen kann, da ich beim thema vererbung nur sehr wenig erfahrung hab, und deshalb noch nich so den überblick hab 😉
    also, ich wollte mir eine einfache Grundklasse dieser art basteln:

    class a{
    private:
        float* b;
        int* c;
    public:
    };
    

    so, diese Klasse will ich nun allen meinen andren Klassen vererben.
    Das problem ist nur, dass sich eine veränderung dieser Zeiger durch irgendeine der andren Klassen auch sofort auf alle andren Klassen dieser Art mit übertragen soll(dh wenn sich in klasse foo der float zeiger auf einen andren speicherbereich ausrichtet,soll die klasse bar auch auf den speicherbereich zeigen).

    eigentlich wär das ja kein problem, normalerweise würde man dann einfach eine globale variable schreiben, da mir das aber nicht sehr lieb wäre,da ich a) keinen in versuchung bringen will,einfach mal so auf die variablen zuzugreifen und b) streng objekt-orientiert bleiben will.



  • class a{
    public:
        static float* b;
    };
    
    class foo : public a
    {
    };
    
    class bar : public a
    {
    };
    
    //in einer Quellcodedatei
    float* a::b = NULL;
    
    foo test1;
    bar test2;
    
    float zahl = 42.0f;
    float pi = 3.141f;
    
    test1.b = π
    //test2.b zeigt auch auf pi
    std::cout << *test1.b << "\t" << *test2.b << "\n";
    
    test2.b = &zahl;
    //test1.b zeigt nun auch auf zahl
    std::cout << *test1.b << "\t" << *test2.b;
    

    So in etwa ?



  • ja so 😉
    //edit funktioniert das denn so in der art?



  • Nach meiner Überarbeitung schon. 😉



  • ok, es funktioniert, jetzt nurnoch die alles entscheidende frage:
    was bedeuted diese zeile:

    float* a::b = NULL;
    

    und wieso muss in der basisklasse b die eigenschaft static haben?



  • static float* b;
    //Ist eine Definition
    
    float* a::b = NULL;
    //Ist eine Deklaration
    

    Siehe C++ FAQ hier und hier

    Das static bedeutet, das es nur ein einziges Objekt von b gibt und alle Klassen des Typs a sich dieses teilen. Siehe Link oben.



  • ahh und wieder was gelernt, danke dir 😉



  • C Newbie schrieb:

    static float* b;
    //Ist eine Definition
    
    float* a::b = NULL;
    //Ist eine Deklaration
    

    Jein.
    Also zweiteres ist eine Definition, bei ersterem kommt es darauf an.

    zB hier:

    void foo()
    {
      static float* b;
    }
    

    wäre es eine Definition
    während es hier

    class Foo
    {
      static float* b;
    };
    

    eine deklaration wäre.

    Warum ist das so schwer?



  • Hat sich vielleicht jemand das Buch "Jetzt lerne ich C++" gekauft *grins*

    Das Buch ist nicht schlecht für Einsteiger aber das mit den Zeigern hab ich bislang immer noch nicht in diesem blöden Buch kapiert 🙂

    Nur in dem Buch hab ich bezeichnungen wie foo und miou gesehen 🙂 Daher komm ich auf die Idee 🙂



  • Hallo,
    nur mal so nebenbei. Wozu hier bitteschön Vererbung?


Log in to reply