Initialisierungsleiste bei geerbter Klasse
-
Hallo,
wenn ich die Klasse A habe und mit meiner Klasse B dann davon erbe übernehme ich ja auch alle Attribute. Wenn ich jetzt bei B noch weitere Attribute hinzufüge und im Constructor dann alle per Initialisierungsleiste setzten möchte, welche Attribute muss ich dann zuerst hinschreiben?
class A { public: int a,b; }; class B : public A { public: int c,d; B( void ); }; //Muss ich jetzt B::B( void ) : a( 1 ), b( 2 ), c( 3 ), d( 4 ) { } //oder B::B( void ) : c( 3 ), d( 4 ), a( 1 ), b( 2 ) { } //schreiben
-
In einem Konstruktor können nur Member der eigenen Klasse und nicht die der Basisklasse initialisiert werden. Aber man kann den Konstruktor der Basisklasse in - bzw. vor - der Initialisierungsliste aufrufen, der dann seinerseits die Member der Basisklasse initialisiert. Also etwa so:
class A { public: A() : a( 1 ), b( 2 ) {} A( int aa, int bb ) : a( aa ), b( bb ) {} int a,b; }; class B : public A { public: B(); int c,d; }; B::B() : A() // oder : A( -1, -2 ) , c( 3 ) , d( 4 ) {}Die Reihenfolge der Initialisierung geschieht immer in der Reihenfolge mit der die Member in der Klasse deklariert sind. Und das ist unabhängig von der Reihenfolge in der Initialisierungsliste.
Eine Basisklasse wird imer vor den eigenen Member initialisiert.Gruß
Werner