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)Beantworten

Virtuelle Vererbung

Bearbeiten

Bei 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)Beantworten


Virtuelle Vererbung - expliziter Aufruf der Konstruktoren

Bearbeiten

Es 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

--benediktibk 22:51, 12. Sep. 2009 (CEST)Beantworten

Zurück zur Seite „C++-Programmierung: Vererbung“.