Kopierkonstruktor + Initialisierungsliste



  • Einen wunderschönen guten Tag,

    nach Äonen Inaktivität in Sachen Programmierung habe ich mich mal wieder angemeldet. Auch, da ich über ein Problem gestolpert bin, als ich in einem wunderbaren Buch zur C++ Programmierung gearbeitet habe und weder das Buch noch das Internet mir eine Antwort auf meine Frage nach dem Warum geben konnte. Ich bin sehr zuversichtlich hier jede Menge alter Hasen zu finden, die mir dabei helfen können.

    Zunächst der Code:

    // ORT.H
    #ifndef ORT_H
    #define ORT_H
    #include <iostream>
    class Ort
    {
    private:
    	int xKoordinate;
    	int yKoordinate;
    
    public:
    	Ort(int = 0, int = 0);
    	Ort(const Ort&);
    	int getX() const;
    	int getY() const;
    };
    
    inline int Ort::getX() const
    {
    	return xKoordinate;
    }
    
    inline int Ort::getY() const
    {
    	return yKoordinate;
    }
    #endif // ORT_H
    
    // ORT.CPP
    #include "Ort.h"
    
    Ort::Ort(int x, int y) : xKoordinate{ x }, yKoordinate{ y }
    {
    }
    
    Ort::Ort(const Ort& einOrt) : xKoordinate{ einOrt.xKoordinate }, yKoordinate{ einOrt.yKoordinate } // HIER ist die Problemstelle
    {
    }
    

    Die betreffende Stelle ist mit einem HIER im Kommentar gekennzeichnet. Die Attribute meiner Klasse sind ja privat, also xKoordinate und yKoordinate. Im Kopierkonstruktor wird in der Initialisierungsliste einfach Über Objektname.Attributname darauf zugegriffen. Und erstaunlicherweise geht das, aber ich verstehe nicht warum. Ich dachte man macht die Attribute privat, sodass man über Zugriffsmethoden darauf zugreifen muss, damit kein rumgefusche möglich ist. Ich könnte mir wohl vorstellen, dass das geht, weil man in der betreffenden Klasse irgendwie unterwegs ist. Und da ich nicht einfach etwas blind übernehmen möchte, sondern es auch verstehen will, frage ich euch. 😃

    Gruß,

    CAres91

    PS: Mir ist bewusst, dass der implizite Kopierkonstruktor ausreichend gewesen wäre, aber der Autor ... 😃



  • Privat heißt Zugriff in der Klasse, nicht im Objekt. Im Objekt wäre es auch blöd, wie schon dein Beispiel zeigt.



  • CAres91 schrieb:

    Ich könnte mir wohl vorstellen, dass das geht, weil man in der betreffenden Klasse irgendwie unterwegs ist.

    So ist es. Objekte können sowohl auf ihre eigenen privaten Daten, als auch auf die privaten Daten anderer Objekte derselben Klasse zugreifen.


Anmelden zum Antworten