Zum Inhalt springen

Diskussion:C++-Programmierung: Vererbung

Seiteninhalte werden in anderen Sprachen nicht unterstützt.
Abschnitt hinzufügen
Aus Wikibooks
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