code erklärung C++ Pointer



  • Hi,

    ich lese mir gerade den Artikel hier durch: http://magazin.c-plusplus.net/artikel/Pointer in C(PlusPlus)

    Die Materie an sich ist kein Problem. Was der folgende Code macht, ist auch soweit klar nur habe ich da ein paar fragen, die ich mir selber nicht beantworten kann.

    #include <iostream>
    
    using namespace std;
    
    class Integer {
    public:
    	explicit Integer( int i=0 ) : data(i) {}
    	Integer( const Integer &i ) : data(i.data) {}
    	~Integer() {}
    
    	inline void setData( int i ) { data = i; }
    	inline int getData() const { return data; }
    
    	Integer& operator=( int i ) {
    		data = i;
    		return *this;
    	}
    
    	Integer& operator=( const Integer &i ) {
    		if (this == &i)
    			return *this;
    
    		data = i.data;
    		return *this;
    	}
    private:
    	int data;
    	operator int () const;
    };
    
    int main(int argc, char **argv) {
    	Integer myInt(7);
    
    	Integer *pi = &myInt;
    	(*pi).setData(12);
    	cout << pi->getData() << '\n';
    
    	return 0;
    }
    

    Kann mir jemand einmal erklären was das hier bedeutet?

    explicit Integer( int i=0 ) : data(i) {}
    Integer( const Integer &i ) : data(i.data) {}
    

    Das sind beides Konstruktoren, der erste erwartet int, wenn ich nichts übergebe ist int automatisch 0 der 2. eine Referenz von Integer soweit ist das klar.

    Was bedeutet aber : data(i) das raffe ich nicht. data ist vom typ int. Ist das ein casting? Und was bedeutet : data(i.data) 1. verstehe ich das mit dem : nicht, ich kenne das nur aus Klassenvererbung:

    class B : public A {};
    

    data und i sind beide vom typ integer deswegen verstehe ich den Zugriff i.data nicht....

    Das mit der Operatoren überladung ist auch soweit klar, jedoch was bedeutet das hier:

    operator int () const;
    

    Das ist eine Read-Only methode, für int oder wie kann man das verstehen?

    Hoffe mir kann jemand helfen.

    ciao BrainError



  • Hallo,

    1. das nennt man Initialisierungsliste
    http://tutorial.schornboeck.net/initliste.htm
    2.

    operator int () const;
    

    ist ein Konvertierungsoperator. Damit kannst du eine Instanz deiner Klasse Integer wie ein normales int in Berechnungen verwenden (konvertiert Integer nach int).



  • Danke für die Hilfe.



  • BrainError schrieb:

    Was bedeutet aber : data(i)

    Das ist der Kopierkonstruktor. Man kann dies in etwa so auffassen:

    int i; //einen Wert erfragen( sieht beim erzeugen eines objektes dann z.B. so aus: Interer MyInteger( 10 ); -> i wird der Wert 10 zugewiesen
    data = i; // der Wert von i wird in data gespeichert
    

    BrainError schrieb:

    Und was bedeutet : data(i.data)

    Das bedeutet ganz einfach dass data mit dem wert des übergebenen Objekts initialisiert wird( das ja auch eine "data" variable enthält ).

    operator int () const;
    

    Das hier ist ein sogenannter Typenumwandlungsoperator( der Begriff "Konvertierungsoperator" ist mir neu ) damit sind sowohl implizite als auch explizite Umwandlungen möglich( siehe auch Braunsteins Post ).

    //EDIT: steht ja alles im tutorial von Braunstein 😃



  • double *T schrieb:

    BrainError schrieb:

    Was bedeutet aber : data(i)

    Das ist der Kopierkonstruktor.

    Nein. 🙂



  • Braunstein schrieb:

    double *T schrieb:

    BrainError schrieb:

    Was bedeutet aber : data(i)

    Das ist der Kopierkonstruktor.

    Nein. 🙂

    stimmt 😃 Ist natürlich ein Allgemeiner Konstruktor. Bin durcheinander gekommen. Aber das hier ist einer:

    Integer( const Integer &i ) : data(i.data) {}
    

    sry 😉


Anmelden zum Antworten