war etwas falsch

This commit is contained in:
Tobias Kachel 2026-06-17 16:57:04 +02:00
parent 23fd29fda3
commit faf2f3a217

View File

@ -4,3 +4,132 @@ Es gibt die Klasse B, die von A erbt (public).
Es gibt eine Klasse C, die von B erbt (public).
Klasse A, B und C haben eine Funktion void a().
Klasse B und C haben eine Funktion void b().
# Klasse A
Klasse A hat nur void a(), nicht mal ein Konstrutor
void A::a(): macht nichts
# Klasse B
hat
## Public
- Konstruktor
- virtual Destruktor
- void a()
- virtual void b()
- void b() const
- static inst liefereIdStat()
## protected
- string s
- void info(const string& text) const
## private
- int id;
- static int idStat = 0
## Wie so Sachen funktionieren
idStat started mit Null, und für jedes B Object wird die aktuelle idStat um eins addiert gegeben.
info wird von jeder Funktion zurückgegeben und gibt:
"id: *Name der Funktion* s"
aus
void B::a(): s += 1 (s ist ein String), info das B::a() aufgerufen wurde
void B::b() hat zwei Versionen, *virtual void ()* und *void b() const*
- virtual b(): s +=2 , info B::b()
- b() const: info B::b() const
static int liefereIdStat() gibt idStat aus
Konstruktor:
- s fängt immer als leerer string an ""
- id wird wie oben erwähnt gemacht
- info das B() ausgeführt wurde
Destruktor:
- info mit "~B()"
# Klasse C
## public
- Konstruktor
- virtual destuktor
- void a()
- void b()
## Wie so funktioniert
- Konstruktor ruft Konstruktor von B auf, mit "C" (bin mir aber nicht ganz sicher ob das das in B Konstuktor überschreibt, wahrscheinlich ja), dannach noch info mit "C()"
- Destruktor ruft nur info mit "~C()" auf
- void C::a(): s += 3 , info C::a()
- void b(): s += 3, info "C::a()"
# Ablauf inf main()
erzeugt ein A object und ruft a() (sollte nichts passieren)
gibt vvv aus und holt sich IdStat
erzeugt b, ruft b() auf (hätte auf virtual getippt)
gitb www aus, liefert IdStat
Erzeugt ein Array von C zeigern der Größe 2
beide werden mit neuen C gefüllt (erhöht idStat)
c[0] ruft a() auf
c[1] ruft b() auf
beide Objecte werden gelöscht
ein const c object wird erstell (++idStat)
gibt xxx + IdStat aus
Zeiger auf ein A object wird einen neuen C object zugeordnet
a() wird aufgerufen
object wird gelöscht
gibt yyy + IdStat aus
Zeiger auf ein B object wird mit neuen C object gefüllt
a() wird aufgerufen
b() wird aufgerufen
object wird gelöscht
gibt zzz + IdStat aus
# Ausgabe
**Was ich denke:**
```
vvv 0
1: B::b() 2
www 1
2: C() C
3: C() C
2: C::a() C3
3: C::b() C4
2: ~C() C3
3: ~C() C4
4: C() C
xxx 4
5: C() C
5: ~C() C
yyy 5
6: C() C
6: B::a() C1
6: C::b() C14
6: ~C() C14
zzz 5
1: ~B() 2
4: ~C() C
```
**Was rauskommt:**
```
vvv 0
1: B()
1: B::b() 2
www 1
2: B() C
2: C() C
3: B() C
3: C() C
2: C::a() C3
3: C::b() C4
2: ~C() C3
2: ~B() C3
3: ~C() C4
3: ~B() C4
4: B() C
4: C() C
xxx 4
5: B() C
5: C() C
yyy 5
6: B() C
6: C() C
6: B::a() C1
6: C::b() C14
6: ~C() C14
6: ~B() C14
zzz 6
4: ~C() C
4: ~B() C
1: ~B() 2
```
# Was waren meine Fehler?
Ich hab vergessen, das mit jeden C Objekt auch den B Konstruktor aufgerufen wird