Designfrage



  • Abend,

    angenommen ich habe sowas:

    class Foo {
    public:
       static Foo** b;
       method();
    };
    

    Da b public ist, kann man von außerhalb jetzt b manipulieren: Foo::b[n]->method();
    Nun möchte ich b private machen, damit der Benutzer nicht mehr direkt auf b zugreifen kann. Dennoch soll der Benutzer in der Lage sein auf jedes Element von b die Methode method() aufzurufen.
    Also er soll nach wie vor auf das n.te Element von b die Methode method() aufrufen können, nur eben nicht mehr direkt zugriff auf b haben. Wie wäre sowas umsetzbar?



  • Wenn es nur um die eine Methode (namens "methode") geht, dann vielleicht einfach eine Memberfunktion Foo::execMethod( uint index ) ? Ansonsten kannst du einfach die statische Variable kapseln, also

    class Foo
    {
    public:
       method();
    
        Foo* getFoo( unsigned int nr )
        {
            if ( nr > max )
                return NULL;
            return b[nr];
        }
    
    private:
       static Foo** b;
    };
    

    edit: Hatte nur ein Wort vergessen..



  • Es heisst "Foobar" und nicht Foo, vielleicht liegt hier auch der Fehler.
    S. Wikipedia: http://de.wikipedia.org/wiki/Foobar

    Weitergehende Fragen gerne an mich per PM 😃



  • Denkbar wäre auch die deklaration der Klasse Foo als singleton und dann die überladung des []-operators.



  • Badestrand schrieb:

    Foo* getFoo( unsigned int nr )
        {
            if ( nr > max )
                return NULL;
            return b[nr];
        }
    

    Badestrand, wieso ist bei dir getFoo() keine statische Funktion?

    Basingstoke schrieb:

    Denkbar wäre auch die deklaration der Klasse Foo als singleton und dann die überladung des []-operators.

    Singleton finde ich jetzt ein wenig weit hergeholt...

    Für die Speicherung der einzelnen Instanzen würde ich ausserdem STL-Container verwenden.



  • Nexus schrieb:

    Badestrand, wieso ist bei dir getFoo() keine statische Funktion?

    War ein Versehen 😉


Anmelden zum Antworten