Class mit Feldfunktion



  • SeppJ schrieb:

    Habe ich doch!

    Oh? Ich bin sicher, ich sah bei deiner korrigierten Variante dasselbe. Ja, bei dir ist es eine statische Funktion.



  • Danke schonmal für die Korrekturen Sepp!

    hmm hmm ... ich versuche das mit dem Kopierkonstruktor gerade nachzuvollziehen: http://de.wikipedia.org/wiki/Dreierregel
    "Wird das für eine dieser Elemente gemacht, so bedeutet das, dass die compilergenerierte Version des entsprechenden Elements den Anforderungen der Klasse nicht genügt."
    Wenn ich auf einen expliziten Destruktor verzichte, brauche ich diese Regeln nicht zu. Ich hab in dem Beispiel den Destruktor nur mal zum Zählen miteingebaut.

    Ist es denn ok, wenn das Program den Vector leert (mit dem default Destruktor) und ich global den zaehler wieder auf 0 setze. Bekomme ich da auch Probleme mit?

    Ich lerne hier sehr viel! Vielen Dank an alle! 🙂



  • Wenn ich auf einen expliziten Destruktor verzichte, brauche ich diese Regeln nicht zu.

    ... befolgen? Nein, das brauchst du nicht. Das heißt, dass alle Kopier-Operationen auch vom Compiler generiert werden können.

    Ist es denn ok, wenn das Program den Vector leert (mit dem default Destruktor) und ich global den zaehler wieder auf 0 setze. Bekomme ich da auch Probleme mit?

    Welcher Zähler? Nein, damit bekommst du keine Probleme.


  • Mod

    Lymogry schrieb:

    Wenn ich auf einen expliziten Destruktor verzichte, brauche ich diese Regeln nicht zu. Ich hab in dem Beispiel den Destruktor nur mal zum Zählen miteingebaut.

    Die Dreierregel brauchst du hier ausdrücklich nur wegen dem Zähler. Da du für den Zähler korrekterweise einen Destruktor brauchst, brauchst du hier auch einen Kopierkonstruktor, damit Kopien (und der vector macht Kopien!) korrekt gezählt werden. Bei deiner PUNKT-Klasse, wie sie eigentlich geplant ist, brauchst du weder einen eigenen Destruktor noch Kopierkonstruktor.

    Ist es denn ok, wenn das Program den Vector leert (mit dem default Destruktor) und ich global den zaehler wieder auf 0 setze. Bekomme ich da auch Probleme mit?

    Ja, aber wozu ist der Zähler dann noch gut?



  • Aha! 🙂

    Gut, dann noch ein paar Fragen zu deinen Korrekturen: 😉

    #include <iostream> 	
    #include <vector>
    
    class PUNKT{
    public:
    	PUNKT(int px=0, int py=0): x(px),y(py) {++zaehl;}				// Konstruktor 
    	PUNKT(const PUNKT& other): x(other.x),y(other.y) {++zaehl;}		// Kopierkonstruktor
    	~PUNKT() {--zaehl;}												// Destruktor 
    								// wo ist der Zuweisungsoperator aus der Dreierregel?? 
    	void verschiebe(int dx, int dy);
    	void ausgabe();
    private:										
    	int x,y;
    	static int zaehl;		// Anzahl der Elemente 
    };
    
    int PUNKT::zaehl=0; 
    
    void PUNKT::verschiebe(int dx, int dy) {
    	x=dx;
    	y=dy;
    }
    
    void PUNKT::ausgabe() {	 			// static für private Dateien??
    	std::cout << zaehl << " Punkt " << x << '/' << y << '\n';	
    }
    
    int main(int count, char **args) {
    
    	std::vector<PUNKT> test;
    	test.push_back(PUNKT(2,3));
    	test.push_back(PUNKT(1,1));
    	test.push_back(PUNKT(2,6));
    	test[0].ausgabe();
    	test.clear();
    	test.push_back(PUNKT(5,5));
    	test[0].ausgabe();
    
    	return 0;
    }
    

    http://de.wikipedia.org/wiki/Dreierregel

    Oder ist mit dem Zuweisungsoperator (int px=0, int py=0) aus dem Konstruktor gemeint?



  • Mit dem Zuweisungsoperator ist der überladene (Kopier-)Zuweisungsoperator der Klasse gemeint:

    class PUNKT {
       ...
       PUNKT& operator=(const PUNKT&);
       ...
    };
    

    Die Dreierregel ist im Übrigen nur eine Faustregel. Und hier ist kein selbstdefinierter Zuweisungsoperator notwendig, weil sich die Anzahl der Objekte bei einer Zuweisung nicht ändert.


  • Mod

    Ja, war didaktisch wohl ein bisschen ungünstig, die Dreierregel an dem einen Beispiel zu erklären, wo man wirklich nur zwei von den dreien braucht 🙂 . Der Instanzenzähler ist einer der ganz wenigen Fälle, in denen die Dreierregeln nicht komplett eingehalten werden muss.



  • Ein klassisches, abstraktes Beispiel: Ich habe einen Zeiger auf eine Ressource als Member. Die Ressource muss freigegeben werden, nachdem sie im Konstruktor erzeugt wurde, und die Klasse muss die Ressource bei Kopien auch kopieren.
    Typisches RAII bzw. Regel der großen Drei.

    static für private Dateien??

    Ja, die Sichtbarkeit dehnt sich auf alles aus, was in einer Klasse überhaupt deklariert werden kann.



  • Sone, ich finds ja großartig, dass du dich hier einbringen willst, aber irgendwie scheinst du nicht alles mitzulesen. 😉



  • Lymogry schrieb:

    irgendwie scheinst du nicht alles mitzulesen

    Eigentlich war dein Kommentar im Code völlig sinnlos, ich musste also raten, was du meinst.
    Also: Was meintest du mit deinem Kommentar? Oder was genau war an meinem Post nicht dem Kontext entsprechend?



  • Ist ja süß, jetzt ist er eingeschnappt 😉

    Lass es gut sein oder philosophier noch etwas. Tipp: Was der Zähler ist, das hast du nach 3 Seiten noch nicht begriffen. Was soll ich dann noch mit deinen sogenannten Tipps oder dem abstrakten Beispiel? 🕶

    @SeppJ
    DANKE! Du hast mir viel geholfen. 🙂

    EDIT: nach dem fünftmaligen Editieren ist er wohl nicht mehr eingeschnappt. 🙂 Oder doch?



  • Oder doch?

    Nein, ich kann mich beherrschen.

    Was der Zähler ist, das hast du nach 3 Seiten noch nicht begriffen.

    Bitte? Natürlich habe ich das!? Ich schrieb "Welcher Zähler" als Anspielung, da du den Zähler ja offensichtlich rausschmeißen wirst, wenn der Destruktor wieder leer ist. Woran erkennst du das?



  • .. so langsam interessiert mich dein Alter. 😃 Frag lieber nicht: wieso!



  • So, jetzt reicht es mir. Solche unsachlichen Diskussionen tue ich mir nicht an.



  • Lymogry schrieb:

    .. so langsam interessiert mich dein Alter. 😃 Frag lieber nicht: wieso!

    Der Einzige, der sich hier kindisch benimmt, bist du. Nebst deiner schwachen Zeichensetzung ist besonders dein überheblicher Stil ein Dorn im Auge. Daher:

    Solche unsachlichen Diskussionen tue ich mir nicht an.



  • Lymogry schrieb:

    .. so langsam interessiert mich dein Alter.

    Teenager mit schweren Minderwertigkeitskomplexen.
    Daher die penetrante Angeberei und gleichzeitige Schleimerei bei denjenigen, die wirklich was draufhaben und bei denen er sich oft genug die Finger verbrannt hat.
    Keine Ahnung, was seine Eltern ihm angetan haben. Aber er macht hier seit Jahr und Tag mit seiner Untertanenmentalität das Forum unsicher.
    Geltungssüchtig und beleidigend.
    Und unredlich. Siehe seine ständige Editiererei.

    Den Moderatoren scheints egal zu sein...



  • @herrgottnochmal alias Sone: ausloggen und anonym stänkern kann jeder ... 🕶
    Du scheinst ja nicht gerade beliebt zu sein .. 🙂 tust mir leid? nö. 🙂



  • @Lymogry:
    Das bezog sich auf Sone/Hacker, nicht dich...


  • Mod

    Ich nehme mal an, die Fragen sind alle beantwortet und den Antworten nichts mehr hinzuzufügen? Jedenfalls scheinen Sone und der Threadersteller ja nichts mehr produktiv beizutragen zu haben. [/closed]


Anmelden zum Antworten