Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Genau - ich brauchte nur einen simplen Standardkonstruktor und nach kurzer Zeit wurde mir das auch wieder bewusst. Ich habe nur theoretisch und bedingt mit Klassen gearbeitet und nun zeigt sich der Vorteil dieser nunmal vorallem bei größeren Programmen. Was ich da noch im Kopf hatte ist, wie bereits erwähnt Heiko Kalistas Aussage:Zitat
Hier wird irgendwie der Falsche Begriff verwendet, es wird nichts
überschrieben, ich glaub Schorsch hat es schon gesagt der Konstruktor
der BasisKlasse wird Initialisiert.
Und dachte genau das muss hier getan werden, wobei absolut kein Bedarf danach bestand.Zitat
Durch die Verwendung des Schlüsselwortes virtual direkt bei der
Deklaration einer Memberfunktion gibt man an, dass damit zu rechnen ist,
dass eine abgeleitete Klasse diese Funktion überschreiben wird.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Dareptor« (22.06.2015, 21:10)
Genau - ich brauchte nur einen simplen Standardkonstruktor und nach kurzer Zeit wurde mir das auch wieder bewusst. Ich habe nur theoretisch und bedingt mit Klassen gearbeitet und nun zeigt sich der Vorteil dieser nunmal vorallem bei größeren Programmen. Was ich da noch im Kopf hatte ist, wie bereits erwähnt Heiko Kalistas Aussage:
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
// ElterKlasse.hpp class ElternKlasse { private: int m_parameter; public: ElternKlasse(int paramater); }; // ElternKlasse.cpp ElternKlasse::ElternKlasse(int paramater) : // Initialisierungsliste m_parameter(parameter) { // Klasse ist initialisert } // KindKlasse.hpp class KindKlasse : public Elternklasse { private: int m_parameter2; public: KindKlasse(int parameter, int parameter2); }; //KindKlasse.cpp KindKlasse::KindKlasse(int parameter, int parameter2) : // Initialisierungsliste ElternKlasse(parameter), // Elternklasse Initialisieren m_parameter2(parameter2) { // Klasse ist initialisert (auch die ElternKlasse ohne Standard Konstruktor) } |
Zitat
Durch die Verwendung des Schlüsselwortes virtual direkt bei der
Deklaration einer Memberfunktion gibt man an, dass damit zu rechnen ist,
dass eine abgeleitete Klasse diese Funktion überschreiben wird.
Fällt mir keiner ein.In welchen Fällen sollte ich keine Initialisierungsliste verwenden, wenn ich meinen Konstruktor überlade ?
Ja.Sollte ich grundsätzlich davon ausgehen, dass eine Initialisierungsliste der bessere Weg ist, wenn ich meinen Konstruktor überlade ?
Sind mir keine Bekannt.Was ist der Nachteil einer Initialisierungsliste ?
Was ist der Unterschied wenn ich eine Initialisierungsliste verwende, gegenüber dem, dass ich die Zuweisungen im Rumpf mache?
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class A { const int& m; public: A(const int& p) : m(p) { } }; class B { const int& m; B(const int& p) { // error: constructor for 'B' must explicitly initialize the reference member 'm' m = p; } }; |
C-/C++-Quelltext |
|
1 2 3 4 5 |
class A { int i = 5; .... }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
class A { int m = 5; public: A() { } }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 |
class B { int m; public: B() : m(5) { } }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
class C { int m; public: C() : m(5) { } C(int p) : m(p) { } C(char p) { } auto print() { std::printf("%d\n", m); } }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
class D { int m = 5; public: D() : m(2) { } D(int p) : m(p) { } D(char p) { } auto print() { std::printf("%d\n", m); } }; |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »H5::« (23.06.2015, 14:50)
C-/C++-Quelltext |
|
1 2 3 4 |
CPlayer::CPlayer(int x, int y) : CCharacter(x, y, true, 100) { } |
C-/C++-Quelltext |
|
1 2 3 4 5 |
CPlayer::CPlayer(int x, int y) : CCharacter(x, y, true, 100) { mTextureNormal.loadFromFile("D:/..."); } |
Werbeanzeige