this im Konstruktor
-
Hallo,
wenn ich den this-Pointer in einem Konstrtruktor verwende, bekomme ich folgende Fehlermeldung:
warning C4355: this' : wird in Initialisierungslisten fuer Basisklasse verwendet
Was ist so schlimm daran, wenn ich den dort verwende?
Noch eine Frage: Ist es möglich, eine Funktion genauso zu benennen, wie das Objekt? Beispiel:
Klasse Klasse(); //ohne parameter
Sonst müsste ich dort so ein blödes "get" davorsetzen.
Danke schonmal.
-
IM Konstruktor darfste schon this verwenden. Braucht man sogar recht oft.
Zu der Frage mit der Funktion: Ja
-
Man darf den this-Zeiger im Konstruktor in einer Membervariable speicher.
Aber nicht benutzen.
Visual C++ meckert auch wenn man den einfach nur abspeichert.
-
interpreter schrieb:
Zu der Frage mit der Funktion: Ja
Jein. Eine Memberfunktion kann nicht so heißen wie die Klasse (Ausnahme sind natürlich die Ctoren). Wenn du eine freie Funktion so nennst wie eine Klasse kommst du in das wunderschöne "Ach-Du-Scheiße-Ich-dachte-C++-hat-keine-Tag-Names-Aber-Warum-Verhält-Sich-mein-Code-dann-so"-Land. Ein Land in dem hauptsächlich Verwirrung regiert.
Um das Problem mal an einem Beispiel zu verdeutlichen:
// Führt einen neuen Typ namens Foo ein. // Im Gegensatz zu C sind wir in C++ gewohnt, dass wir diesen // neuen Typ Foo unqualifiziert benutzen können (also einfach Foo f). class Foo {}; Foo f; // ok. Globales Objekt f vom Typ Foo // Deklaration einer Funktion Foo // Mögen Ärger und Leid von nun an regieren // Von nun an ist Foo nicht mehr der Typ sondern die Funktion Foo Foo(); int main() { Foo f; // Ups! Kein Objekt f vom Typ Foo sondern ein ERROR! class Foo f1; // ok }
Verhindern kann man das Ganze in dem man ein typedef verwendet:
typedef class Foo Foo; class Foo {};
In diesem Fall kann man aber *keine* Funktion mehr mit dem Namen Foo erzeugen, da der Name Foo in diesem Scope bereits deklariert ist.
-
HumeSikkins schrieb:
interpreter schrieb:
Zu der Frage mit der Funktion: Ja
Jein.
Er wollte aber nur wissen, ob es möglichst ist und das ist klar mit "Ja" zu beantworten. :p
Dass es Probleme nach sich zieht ist klar...
-
Ich finde es sehr gut, dass HumeSikkins auf diese Problematik hinweist. Denn diese Zusammenhänge sind nur wenigen klar! (wird in vielen Büchern nicht angesprochen)