this->
-
Hi,
ich bin mir mal wieder nicht sicher ob ich etwas richtig verstanden habe:
Stimmt es das this-> dafür da ist auf klasseneigene memberfunktionen oder variablen zuzugreifen, wie im folgenden beispiel://Demonstriert die Verwendung des this zeigers um auf Klasseneigene elemente zugreifen zu können #include <conio.h> #include <iostream> #include <string> using namespace std; class Konto { private: int nummer; int stand; string name; public:Konto(int nr,int st,string na); ~Konto(); void m_PrintKonto(void); void m_function(void); }; Konto::Konto(int nr,int st,string na) { this->nummer=nr;//zugriff auf ellemente innerhalb der Klasse this->stand=st;//zugriff auf ellemente innerhalb der Klasse this->name=na;//zugriff auf ellemente innerhalb der Klasse this->m_function();//zugriff auf eine Funktion innerhalb der Klasse }; Konto::~Konto() { }; void Konto::m_PrintKonto(void) { cout << "Name: "<<name<<endl; cout << "Nummer: "<<nummer<<endl; cout << "Stand: "<<stand<<endl; }; void Konto::m_function(void)//nur als beispiel für einen aufruf { } int main(void) { Konto giro(0000000,10,"Maximilian Fink"); giro.m_PrintKonto(); getch(); return 0; }
Da ich im Konstruktor Konto ja mit this-> arbeite könnten die Parameter von Konto auch den Klasseneigenenen Variablen entsprechen ohne das dies zu einem Konflikt führt? (ich weis schlechter Stiel)
PS: Normalerweise gehört die Klassendeklaration ja in einen Header und die Klasse selbst in eine .cpp, habs mir nur für den Versuch gespart
vielen dank im voraus.
cu max
-
Du siehst das richtig. Obwohl ich persönlich es nicht unbedingt schlechten Stil finde, wenn Parameter den selben Namen wie Datenelemente haben. Ich halte noch viel weniger von irgendwelchen Präfixen als von this->.
-
Explizit musst du nur mit this-> arbeiten wenn sich Namen überdecken. Was du machst ist generell schlecht, da die Variablen zweimal initialisiert werden.
Das hier ist besser und kürzer...
Konto::Konto(int nr, int st, string na) : nr(nr), st(st), na(na) { }
Ob man das so macht oder nicht ist Geschmackssache.
-
@MaSTaH: Naja das wichtigste ist ersteinmal das ich weis was man damit machen kann, dann kann ich meinen Stiel verbessern, ausserdem vestehe ich deine version nicht wirklich.
vielen dank.
cu max
-
Das ist eine Konstruktor-Initialisierungsliste (siehe auch http://www.schornboeck.net/ckurs/ctor.htm ).
-
Aha, danke ich werde es mir mal anschauen.
Ist das dein Tutorial?cu max
-
Danke, super, das scheint ja gar nicht so schwer zu sein.
vielen dank.
cu max
-
Master_Max schrieb:
Ist das dein Tutorial?
Nein, das ist das von Shade of Mine.
-
Stimmt es das this-> dafür da ist auf klasseneigene memberfunktionen oder variablen zuzugreifen
Naja, generell ist this nicht dafür da, um Namenskonflikte zu umgehen, sondern um innerhalb der Klasse Zugriff "auf sich selbst" zu haben.
Man kann this zwar dazu missbrauchen, wie in deinem Beispiel, aber hier nochmal was nützliches:
void func(Klasse* ...) { ... } class Klasse { void foo() { func(this); } };
-
Danke an alle, ich denke es jetzt gerafft zu haben.
Das Tutorial von Shade Of Mine ist echt gut, geht kuz und knapp auf interresante Themen ein. (Gibt es das eigentlich auch zum Download(also alles komplett?))
Ich habe es nämlich nicht auf der www.robsite.de entdecken können.
@Shade Of Mine schick es denen doch einmal.cu max
-
Master_Max schrieb:
Das Tutorial von Shade Of Mine ist echt gut, geht kuz und knapp auf interresante Themen ein. (Gibt es das eigentlich auch zum Download(also alles komplett?))
Es ist nicht komplett, deshalb gibt es es auch nicht zum download
Ich arbeite bereits an weiteren Kapiteln...
-
Mach halt mal in deiner Signatur nen link.
-
Optimizer schrieb:
Mach halt mal in deiner Signatur nen link.
er ist ja absichtlich draussen - da ich nur schlechte erfahrung gemacht habe wenn ein halbfertiges tutorial online ist. denn manchmal mache ich wochenlang nichts daran (zeitmangel) und dann hagelt es immer soviele emails...