private get-Methode einer property


  • Mod

    Naja, die Bedeutung von private ist eben, dass Sachen die private sind, nicht von außen verfügbar sind. Und die von public ist, dass es von außen frei verfügbar ist. Das gilt für ALLES - egal ob Funktionen oder Variablen. Das heißt, du hast es genau andersrum gemacht als gedacht.

    Ich kann mich zwar nur noch dunkel an meine Pascalzeiten erinnern, aber dort kann das unmöglich anders gewesen sein.



  • Hey,

    also ich hab das so gemacht:

    class Sample 
    {
    private:
        int fLength; 
    
    public: 
        __declspec ( property ( get = GetFunction ) ) int lenght ;
        int GetFunction( ) const
        { 
            return fLength; 
        } 
    };
    

    so funktioniert das auch, und ich kann auch auf Sample s.length zugreifen. Wenn ich jetzt aber die GetFunction private mach, dann geht das nicht mehr. Und in Pascal geht das so. Das ist ja auch der Sinn und Zweck der Sache (finde ich). Wer besser mit Code umgehen kann, so geht das in Pascal:

    TSample = class
    private
    fLength: Integer;
    function GetLength: Integer;
    public
    property Length: Integer read GetLength;
    end;

    MfG Bergmann.



  • Du versuchst ein Pascal Design in C++ anzuwenden. Wirf das weg und mach es anders.
    Weiters ist das kein Standard-C++.



  • Also auf Properties verzichten und Get, bzw. Set-Methodn benutzen, oder gibt es in c++ etwas vergleichbares zu den Properties von Pascal?

    MfG Bergmann.



  • Bergmann89 schrieb:

    Also auf Properties verzichten und Get, bzw. Set-Methodn benutzen, oder gibt es in c++ etwas vergleichbares zu den Properties von Pascal?

    MfG Bergmann.

    Getter und Setter sidn oftmals unnötig und hässliches Design. Nein, sowas gibt es nicht und wird auch nicht gebraucht. Nenne mir deinen konkreten Fall, warum du das benötigst, dann kann man dir zeigen, wie es besser gemacht werden sollte 😉



  • Naja es is ne einfache Klasse Point, mit einem X- und einem Y-Wert. Ich halte eine Klasse für so ein kleines Konstrukt auch sinnlos, aber der Prof wollt es halt so haben. Das ganze sieht so aus:

    class Point{
    private:
        float x, float y;
    public
        float getX(void);
        float getY(void);
        setPoint(float x, float y);
    }
    

    meiner Meinung nach würde da ein struct besser sein, oder wenns unbedingt ne Klasse sein soll würd ich das so machen:

    class Point{
    public:
        float x, float y;
        Point(float _x, float _y);
    }
    

    MfG Bergmann.



  • Der C++-Builder von Borland besitzt Properties im eigentlich C++ gibt es sowas nicht und man brauch es auch eher selten...

    Ich habe den Fall auch nur selten, dass ich mal nen Getter brauch. Setter noch weniger. Meist stecken komplexere Funktionen dahinter, die die Daten, die man "setzt" auch gleich noch verarbeiten.



  • Bei einem Point würde ich die x und y Werte public machen.



  • 314159265358979 schrieb:

    Bei einem Point würde ich die x und y Werte public machen.

    Bergmann89 hat ja bereits erwähnt, dass dies wegen seines Professors nicht geht.

    Dieser scheint wohl die normalen Kombinationen getX , getY , setX und setY zu verlangen. Dann würde ich diese auch implementieren. Und Getter mit const nach der Methode kennzeichnen, da diese das Objekt nicht ändern.



  • Bergmann89 schrieb:

    Naja es is ne einfache Klasse Point, mit einem X- und einem Y-Wert. Ich halte eine Klasse für so ein kleines Konstrukt auch sinnlos, aber der Prof wollt es halt so haben. Das ganze sieht so aus:

    class Point{
    private:
        float x, float y;
    public
        float getX(void);
        float getY(void);
        setPoint(float x, float y);
    }
    

    Ist in Ordnung, wobei ich beim getrennten Lesen von x und y auch das getrennte Schreiben gut fände. Außerdem kannst Du dir das (void) sparen, da kann einfach () stehen. Die Methoden sollten auch wie bereits erwähnt mit const ausgestattet sein. In C++ nutzt man const-correctness, d.h. man kennzeichnet Methoden, wenn sie nichts verändern. Das sorgt für einige Sicherheit beim Programmieren, da man nicht aus Versehen (oder auch intentional, weil man das Konzept des Vorprogrammierers nicht verstanden hat) was ändern. Schreibt man dann so:

    float getX() const;
    

    meiner Meinung nach würde da ein struct besser sein

    und da hast Du auch recht, aber das bringt Dir keine Note. Also merke Dir das für Dich und schreib dem Prof., was er möchte. 😉

    Edit: Es bringt Dir eine Note, aber wohl keine besonders gute.


Anmelden zum Antworten