Initialisierung von vererbten Attributen
-
Guten Abend,
ich möchte in einem Konstruktor einer abgeleiteten Klasse sowohl die Attribute dieser wie auch die der Basisklasse initialisieren:#include <iostream> using namespace std; class A{ int a; double b; public: A(){} A(int x, double y):a(x),b(y){} }; class B:public A{ float c; public: B(){} B(float z, int x, double y):c(z),A(x),A(y){} }; int main(){}Was übersehe ich, dass der Compiler über die fehlende Deklaration von x und y im Konstruktor von B in diesem Gültigkeitsbereich meckert?
-
B(float z, int x, double y) : A(x,y), c(z) {}
-
Privatbesitz! Betreten verboten!
Mach's doch so:
B(float z, int x, double y) : A(x, y), c(z) {}~Edit: Grazie, Gugelmoser.~
-
Die Initialisierung erfolgt
1. von Basisklassen, dann
2. von Membern in der Reihenfolge Ihrer DeklarationUnd zu Deinem Fehler:
"A" als Basisklasse hat keinen KonstruktorA(int)oderA(double).
Also muss es heißen:class A{ // wie oben } class B:public A{ float c; public: B(){} B(float z, int x, double y): A(x,y), c(z) };...wie ja schon geschrieben wurde...

23:02h
-
Caligulaminus schrieb:
~Edit: Grazie, Gugelmoser.~
Deins war nicht falsch. Es war nur nicht die logische Wahl.

-
Gugelmoser schrieb:
Deins war nicht falsch. Es war nur nicht die logische Wahl.

Form sollte Inhalt reflektieren.
Nochmal Danke ~- ich hätt' gedacht, es wär' verboten.~