Elementinitialisierer oder nicht?
-
SO ein Bullshit alles lässt sich kompilieren und läuft so wie man es erwarten. Kuldren musste ja auch schon schnell editieren...

-
Ja das ";" is doch ok...

-
1310-Logik schrieb:
.. class Joah { int a; public: Joah(int a) : a(a) // Geht das überhaupt? { ; } ~Joah(); };Da kriegst Du einen Namenskonflikt

Nein, kein Namenskonflikt!
Das ist gueltig.Initialisierungslisten wuerde ich in den meisten Faellen empfehlen, denn wenn du Konstante Member variablen in der Klasse hast, dann kannst du die gar nicht anders initialisieren (es sei denn sie sind statisch und von einem integralen Typ).
-
Kenner der Listen schrieb:
..., wenn es eigene Klassen mit Ctor sind muss man das sogar!
Wasn das fürn Unsinn.

-
AberHallo schrieb:
Kenner der Listen schrieb:
..., wenn es eigene Klassen mit Ctor sind muss man das sogar!
Wasn das fürn Unsinn.

..wenn es keinen Default Ctor gibt,
oder wenn man Referenzen als Member hat..
-
Aha, da bin ich hier anscheinend nicht der einzige, der das eine oder andere Grundlegende nicht weiß :p
Danke jedenfalls.
-
GPC schrieb:
Dein letztes Beispiel funktioniert zwar, ist aber nicht gerade schick. Versuche einen besseren Namen für den Parameter oder das Member zu finden

Wieso nicht schick? Ist doch schicker als (int a_) : a(a_)...
-
Stimmt. Ich hasse Unterstriche. Macht für mich alles unübersichtlicher.
Ich würde NIE Unterstriche bei eigenen Definitionen verwenden.
-
1310-Logik schrieb:
AberHallo schrieb:
Kenner der Listen schrieb:
..., wenn es eigene Klassen mit Ctor sind muss man das sogar!
Wasn das fürn Unsinn.

Kenner der Listen schrieb:
..wenn es keinen Default Ctor gibt,
funktioniert das Beispiel immer noch ohne Verwendung einer Initialisierungsliste.
Kenner der Listen schrieb:
oder wenn man Referenzen als Member hat..
davon ist im Beispiel nicht Rede.
=>Kenner der Listen schrieb:
Initalisierungsliste verwenden, wenn es eigene Klassen mit Ctor sind muss man das sogar!
Diese Aussage ist so definitiv falsch.
-
DrGreenthumb schrieb:
GPC schrieb:
Dein letztes Beispiel funktioniert zwar, ist aber nicht gerade schick. Versuche einen besseren Namen für den Parameter oder das Member zu finden

Wieso nicht schick? Ist doch schicker als (int a_) : a(a_)...
Und was nun:
(int a) : a(a*5), b(a)Da weiß man gar nicht was jetzt passiert, bzw. man kann b nicht den wert von this->a geben.
-
class IntWrapper { public: //IntWrapper(){} // Ohne Def C'tor gehts nicht IntWrapper( int a ) : a_( a ) { } void SetA( int a ) { a_ = a; } ~IntWrapper(){} private: int a_; }; class Joah { IntWrapper a_; public: Joah(int a) { a_.SetA( a ); } ~Joah(){} };error C2512: 'IntWrapper' : no appropriate default constructor available
class IntWrapper { public: //IntWrapper(){} IntWrapper( int a ) : a_( a ) { } void SetA( int a ) { a_ = a; } ~IntWrapper(){} private: int a_; }; class Joah { IntWrapper a_; public: Joah(int a) : a_( a ) // Mit Initialisierungsliste schon { a_.SetA( a ); } ~Joah(){} };@AberHallo
Das meinte ich mit Def-C'tor.
Habe nie behauptet was Du sagst ist falsch, sagte das nur zur Erklärung was nicht geht, und warum man die Liste vorziehen sollte.