statische member und Vererbung



  • Wozu brauchst du eigentlich diese statische Variable?



  • Meinst du jetzt warum sie static ist?

    Raptor schrieb:

    Das Attribut value_ schreit geradezu nach static.(Warum sollte auch eine Klasse _5Euro einen anderen Wert als 500 haben??)

    Oder warum ich sie ueberhaupt brauche?

    Es ist ein Problem, auf das ich in einem Projekt gestossen bin. Ich habe hier nur vereinfachten Code gepostet, der aber ziemlich genau das Problem beschreibt.



  • class Geldeinheit 
    { 
    public:
        virtual ~Geldeinheit();
        virtual int getValue() const = 0;
    }; 
    
    class FuenfEuro
    {
    public:
        virtual int getValue() const
        {
            return 500;
        }
    };
    
    class ZweiCent
    {
    public:
        virtual int getValue() const
        {
            return 2;
        }
    };
    


  • hab das ableiten oben im code vergessen 🙄



  • Also ist es mit static nicht zu machen?
    Kann man daraus schliessen, das man static und Vererbung knicken kann?



  • MatriX schrieb:

    (Warum sollte auch eine Klasse _5Euro einen anderen Wert als 500 haben??)

    Ich revidiere meine Aussage zu:
    "Warum sollten alle Member einer Klasse nicht alle einen gleichen Wert value_ haben?(z.B. 500 oder 5)"?

    Deswegen gefaellt mir auch die getValue-Variante nicht so gut, weil ich nur Konstanten returnen kann. Ich moechte aber, das value_ variabel ist, so dass ich (aus was fuer einem Grund auch immer) value fuer alle Member einer Klasse auch veraendern kann.
    Wie mache ich das?



  • MatriX schrieb:

    Ich moechte aber, das value_ variabel ist, so dass ich (aus was fuer einem Grund auch immer) value fuer alle Member einer Klasse auch veraendern kann.

    Zwingt dich ja keiner getValue() ne Konstante liefern zu lassen.

    Falls dein Beispiel geschickt gewählt ist würde ich persönlich dafür plädieren gar nicht abzuleiten, lediglich eine Klasse Geldeinheit, privater Konstruktor, value_ per Objekt und ein paar public static const Instanzen.



  • Was du brauchst ist ein static data member, das fuer jede Klasse jeweils den richtigen Wert hat. Durch dynamic-binding kriegst du also jedesmal den richtigen Wert fuer value_ auf der Grundlage, das aufgrund des dynamisch bestimmten Typs der richtige Wert selectiert wird. Also deklarier value_ doch einfach als [cpp]virtual static int value_[/cpp]
    Das einzige Problem bei der Sache ist.... das geht nicht mit static data membern, sondern nur mit Funktionen 😃
    Wuerde mich aber auch mal interessieren, wie man das machen koennte, was ich eben beschrieben hab.



  • Das, was Raptor eben beschrieben hat, trifft voll ins Schwarze.
    Wie kann man das realisieren?



  • class Geldeinheit
    {
    public:
        virtual const int getValue() = 0;
    };
    
    class _5Euro : public Geldeinheit
    { 
     static const int value = 500;
     const int getValue() { return value;}
    
    };
    
    class _2Cent : public Geldeinheit
    { 
     static const int value = 2;
     const int getValue() { return value;}
    
    };
    

Anmelden zum Antworten