Hi,

mir stellt sich gerade die Frage welche Art und Weise der Deklaration einer get-Methode denn überhaupt die sinnvollste ist.

Um das ganz mal zu konkretisieren: Folgende, hier vereinfachte, Klasse:

Code:
class Shape {

    private:
        Color color;

    protected:
        Shape( Color const& _color) : color(_color) {}
	virtual ~Shape() {}
	virtual void draw() const = 0;

    public:

        void setColor(const Color & _color) { color = _color; }

        //Hier nun die Frage welche die richtige ist
        Color & getColor() { return color; }
        const Color*  getColor() { return &color; }
        const Color*  getColor() const { return &color; }
        const Color* const getColor()  { return &color; }
        const Color* const getColor() const { return &color; }
        const Color & getColor() const { return color; }
        const Color& getColor()  { return color; }
};
get-Methoden sollten ja eigentlich das Objekt nicht verändern, von dem Gesichtspunkt aus hätte ich
const Color & getColor() const { return color; }
genommen. Andererseits kann ich dann folgendes nichtmehr machen:
Code:
s->getColor().setR(255);
Von daher würde ich denhier nehmen:
Code:
Color & getColor() { return color; }
Allerdings kann ich mit dem dann wiederum in der draw()-Methode einer Abgeleiteten Klasse nicht getColor() aufrufen, weil draw() ja const ist und von daher dürfen keine nicht-const Methoden aufgerufen werden. Man könnte color in Shape auch public oder protected machen .... Ich bin im Moment total verwirrt. Wär echt toll wenn jemand Licht ins Dunkle bringen könnte.