Diskussion:C++-Programmierung: Vererbung

Aus Wikibooks
Zur Navigation springen Zur Suche springen

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[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:
Nuvola-inspired-terminal.svg
 1 class Basis { public: int b; };
 2 class Links  : public Basis { public: int l; };
 3 class Rechts : public Basis { public: int r; };
 4 class Enkel : public Links, public Rechts {};
 5 
 6 int main() {
 7    Enkel e;
 8    e.l = 12; // klar.
 9    e.Links::l = 12;  // das gleiche, nur ausführlicher
10 
11    e.Links::b = 42; // b des Basisklassen-Objektes von »Links«
12    e.Rechts::b = 9; // b des Basisklassen-Objektes von »Rechts«
13 }

--RokerHRO 10:35, 17. Jul. 2009 (CEST)


Virtuelle Vererbung - expliziter Aufruf der Konstruktoren[Bearbeiten]

Es ist nicht nötig die Konstruktoren explizit aufzurufen, zumindest der gcc handhabt das so:

Quellcode :
Nuvola-inspired-terminal.svg
 1 #include <stdio.h>
 2 
 3 class A
 4 {
 5 	public:	
 6 	A()
 7 	{
 8 		printf("A\n");
 9 	}
10 };
11 
12 class B : virtual public A
13 {
14 	public:	
15 	B()
16 	{
17 		printf("B\n");
18 	}
19 };
20 
21 class C : virtual public A
22 {
23 	public:	
24 	C()
25 	{
26 		printf("C\n");
27 	}
28 };
29 
30 class D : public B, public C
31 {
32 	public:	
33 	D()
34 	{
35 		printf("D\n");
36 	}
37 };
38 
39 int main()
40 {
41 	A a;
42 	B b;
43 	C c;
44 	D d;
45 	
46 	return 0;
47 }
Ausgabe auf der Konsole :
Nuvola-inspired-terminal.svg
1 A
2 A
3 B
4 A
5 C
6 A
7 B
8 C
9 D

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