Diskussion:C++-Programmierung: Vererbung
Letzter Kommentar: vor 15 Jahren von Benediktibk in Abschnitt Virtuelle Vererbung - expliziter Aufruf der Konstruktoren
bei einem struct ist die Standardvererbung public, bei einer class ist sie private
- Stimmt, liebe(r) Anonymous. Das sieht § 9 Abs. 4 im C++-Standard genauso. Baust du es ein? --RokerHRO 22:00, 7. Feb. 2009 (CET)
Virtuelle Vererbung
BearbeitenBei Virtueller Vererbung wird erwähnt, dass "Jede Instanz der Klasse DateiZumLesenUndSchreiben zwei Teilobjekte der Basisklasse Dateihat." Es wäre ein Bsp hilfreich, wie man auf die Teilobjekte zugreifen kann
- Beispiel:
class Basis { public: int b; };
class Links : public Basis { public: int l; };
class Rechts : public Basis { public: int r; };
class Enkel : public Links, public Rechts {};
int main() {
Enkel e;
e.l = 12; // klar.
e.Links::l = 12; // das gleiche, nur ausführlicher
e.Links::b = 42; // b des Basisklassen-Objektes von »Links«
e.Rechts::b = 9; // b des Basisklassen-Objektes von »Rechts«
}
--RokerHRO 10:35, 17. Jul. 2009 (CEST)
Virtuelle Vererbung - expliziter Aufruf der Konstruktoren
BearbeitenEs ist nicht nötig die Konstruktoren explizit aufzurufen, zumindest der gcc handhabt das so:
- Quellcode :
#include <stdio.h>
class A
{
public:
A()
{
printf("A\n");
}
};
class B : virtual public A
{
public:
B()
{
printf("B\n");
}
};
class C : virtual public A
{
public:
C()
{
printf("C\n");
}
};
class D : public B, public C
{
public:
D()
{
printf("D\n");
}
};
int main()
{
A a;
B b;
C c;
D d;
return 0;
}
- Ausgabe auf der Konsole :
A
A
B
A
C
A
B
C
D