1 /* 2 * objektorientierung.cpp 3 * 4 * Zusammenfassung Objektorientierung. 5 * klasse_beispielprogramm zur Systemprogrammierung, Teil 6. 6 * klasse_author: H.Drachenfels 7 * Version: 2.6.2023 8 */
9 #include <iostream>
10
11 // Oberklasse klasse_a
12 class klasse_a
13 {
14 public:
15 klasse_a()
16 {
17 std::cout << "klasse_a::klasse_a(" << this << ")\n";
18 }
19
20 virtual ~klasse_a()
21 {
22 std::cout << "klasse_a::~klasse_a(" << this << ")\n";
23 }
24
25 static void f()
26 {
27 std::cout << "klasse_a::f()\n";
28 }
29
30 void g()
31 {
32 std::cout << "klasse_a::g(" << this << ")\n";
33 }
34
35 virtual void h()
36 {
37 std::cout << "klasse_a::h(" << this << ")\n";
38 this->i(); // dynamische Bindung!
39 }
40
41 private:
42 virtual void i()
43 {
44 std::cout << "klasse_a::i(" << this << ")\n";
45 }
46 };
47
48 // Unterklasse klasse_b von klasse_a
49 class klasse_b : public klasse_a
50 {
51 public:
52 klasse_b()
53 {
54 std::cout << "klasse_b::klasse_b(" << this << ")\n";
55 }
56
57 ~klasse_b()
58 {
59 std::cout << "klasse_b::~klasse_b(" << this << ")\n";
60 }
61
62 static void f()
63 {
64 std::cout << "klasse_b::f()\n";
65 }
66
67 void g()
68 {
69 std::cout << "klasse_b::g(" << this << ")\n";
70 }
71
72 void h()
73 {
74 std::cout << "klasse_b::h(" << this << ")\n";
75 this->i(); // dynamische Bindung: klasse_b::i(this)
76 klasse_a::h(); // statische Bindung: klasse_a::h(this)
77 }
78
79 void i()
80 {
81 std::cout << "klasse_b::i(" << this << ")\n";
82 }
83 };
84
85 int main()
86 {
87 klasse_a::f(); // ok, kein Parameter this bei static-Methoden
88 //klasse_a::g(); // Fehler, Parameter this kann nicht initialisiert werden
89 //klasse_a::h(); // Fehler, Parameter this kann nicht initialisiert werden
90 //klasse_a::i(); // Fehler wegen private und this
91 std::cout << '\n';
92
93 klasse_a objekt_a; // statische Bindung: klasse_a::klasse_a(&objekt_a)
94 klasse_a *a = &objekt_a;
95 a->f(); // statische Bindung: klasse_a::f(), kein Parameter this
96 a->g(); // statische Bindung: klasse_a::g(a)
97 a->h(); // dynamische Bindung: klasse_a::h(a)
98 //a->i(); // Fehler wegen private
99 std::cout << '\n';
100
101 klasse_b objekt_b; // statische Bindung: klasse_b::klasse_b(&objekt_b)
102 a = &objekt_b;
103 a->f(); // statische Bindung: klasse_a::f(), kein Parameter this
104 a->g(); // statische Bindung: klasse_a::g(a)
105 a->h(); // dynamische Bindung: klasse_a::h(a)
106 //a->i(); // Fehler wegen private
107 std::cout << '\n';
108
109 klasse_b *b = &objekt_b;
110 b->f(); // statische Bindung: klasse_b::f(), kein Parameter this
111 b->g(); // dynamische Bindung: klasse_a::g(b)
112 b->h(); // dynamische Bindung: klasse_b::h(b)
113 b->i(); // dynamische Bindung: klasse_b::i(b)
114 std::cout << '\n';
115 }
116