Programmieren, Algorithmen und Datenstrukturen 2 (Vorlesung 5)

Destruktor

  • enthält Freigabe dynamischer Speicher (delete)
  • genutzt um Objekte zu löschen
  • Reihenfolge:
    1. Abgleitete Klasse
    2. Member Objekte
    3. Basisklasse

Konstruktion

  • Reihenfolge:
    1. Basisklasse
    2. Member-Objekte
    3. Abgleitete Klasse

Klassendiagramm

  • Basisklasse steht an der Spitze des Pfeils

Klasse

  • Die Initialisierung bzw. Zerstörung eines Objekts läuft nicht nach den Initialisierern, sondern nach der Reihenfolge innerhalb der Klasse

Virtuelle Methoden

  • Deklaration und Definition in der Basisklasse
  • „Überschreibung“ in abgeleiteten Klassen != Überladen
  • Überschreiben = gleiche Argumente / Signatur und gleicher Name
  • Wird genutzt um Methoden neue Funktionen zu verweisen
  • Schlüsselwort = „virtual“
  • Virtual wird nur in der Basisklasse aufgeführt (d.h. die abgeleiteten Klassen dürfen überschreiben)
  • Bsp.:
    • virtual void print( ) const;
	void employee::print_list( ) {
	for( employee* p = list; p; p = p->next )
	{
		p->print( );
	}
  • Das Beispiel durchläuft alle Employees, aber greift dabei auf die virtuelle print Methode gemäß des jeweiligen Typs zu.
  • Direkter Zugriff auf die jeweilige Methode ist über den Gültigkeits-Auflösungs-Operator möglich
  • Eine virtuelle Methode muss für die Klasse, in der sie das erste Mal deklariert wurde, auch definiert werden

Abstrakte Klassen

  • Klasse mit min. 1 reiner virtuellen Methode
  • entweder durch = 0 initialisiert ( Beispiel ) oder alle Konstruktoren = protected
  • können keine Objekte erzeugen
  • Methoden lassen sich meist nicht richtig definieren
  • nur als Basisklasse gedacht ( Rohform für abgeleitete Klassen )
  • Klassisches Beispiel sind „Shapes“
  • Abgeleitete Klassen von abstrakten Basisklasse sind wieder abgeleitet, solange die rein virtuellen Methoden nicht vollständig überschrieben wurden ( schichtweise möglich )
class X {
	public:
		virtual void a( ) = 0; // rein virtuelle Methode
		virtual void b( ) = 0; // rein virtuelle Methode
	};

	class Y : public X { void a( ); }; // überschreibt X::a -> a ist nicht mehr rein virtuell

	class Z : public Y { void b( ); }; // überschreibt X::b -> erst jetzt sind a und b nicht mehr rein virtuell

	X obj1; // Fehler: Deklaration eines Objekts der abstrakten Klasse X
	Y obj2; // Fehler: Deklaration eines Objekts der abstrakten Klasse Y
	Z obj3; // ok

Kapselung

  • public (+) Alle
  • private (-) Eigenen Klasse
  • protected (#) Eigene Klasse und public abgeleitete Klassen

Klassenvererbung

  • class A : public B { /*…*/ }; // …
  • class A : protected B { /*…*/ }; // …
  • class A : private B { /*…*/ }; // über B kann nicht mehr auf A zugegriffen werden
Maximilian
Maximilian

Herzlich willkommen! Ich bin Max, ein Informatiker mit über 15 Jahren Berufserfahrung. Hier teile ich meine Leidenschaften, Erlebnisse und Perspektiven. Ich lade dich ein, gemeinsam mit mir auf eine Entdeckungsreise zu gehen.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie, wie Ihre Kommentardaten verarbeitet werden.