lesson 2 OOP 3 Flashcards
Was ist Operatorüberladung in C++ und welches Ziel verfolgt sie?
Operatorüberladung erlaubt es, bestehende Operatoren für benutzerdefinierte Datentypen neu zu definieren. Ziel ist es, eine intuitive und kompakte Schreibweise zu ermöglichen, indem die Operatoren auf benutzerdefinierte Datentypen angewendet werden können.
Welche Arten von Operatoren können überladen werden?
Sowohl unäre als auch binäre Operatoren können überladen werden. Unäre Operatoren arbeiten auf einem Operanden, während binäre Operatoren zwei Operanden verwenden.
Was sind die Limitierungen der Operatorüberladung?
Limitierungen der Operatorüberladung umfassen:
- Es können nur bestehende Operatoren überladen werden.
- Die Stelligkeit und Präzedenz eines Operators können nicht geändert werden.
- Überladene logische Operatoren bieten keine Short-Circuit Evaluation.
Was sind Konstruktoren und Destruktoren in C++?
Konstruktoren initialisieren Objekte beim Erstellen, während Destruktoren aufgerufen werden, um Ressourcen freizugeben, wenn das Objekt zerstört wird. Sie automatisieren den Lebenszyklus eines Objekts.
Welche Arten von Konstruktoren gibt es in C++?
Es gibt Default-Konstruktoren, Copy-Konstruktoren und benutzerdefinierte Konstruktoren. Jeder Typ dient einem anderen Zweck, von der Standardinitialisierung bis zur Kopie eines Objekts.
Was ist der Unterschied zwischen einem Copy-Konstruktor und einem Zuweisungsoperator?
Der Copy-Konstruktor wird bei der Initialisierung eines neuen Objekts durch ein anderes Objekt verwendet, während der Zuweisungsoperator verwendet wird, um den Zustand eines existierenden Objekts zu überschreiben.
Was ist statische Bindung in C++?
Bei der statischen Bindung entscheidet der Compiler zur Compile-Zeit, welche Methode aufgerufen wird, basierend auf dem Datentyp des Objekts. Dies passiert bei Funktionen, die nicht als ‘virtual’ markiert sind.
Was ist dynamische Bindung in C++ und wann wird sie verwendet?
Dynamische Bindung entscheidet zur Laufzeit, welche Methode aufgerufen wird. Sie wird bei virtuellen Funktionen verwendet, wenn der tatsächliche Objekttyp erst zur Laufzeit bekannt ist.
Was ist die vtable in C++ und wie unterstützt sie die dynamische Bindung?
Die vtable ist eine Tabelle, die Zeiger auf virtuelle Funktionen enthält und zur Laufzeit verwendet wird, um die richtige Funktion in einer Vererbungshierarchie aufzurufen.
Warum ist es wichtig, den Destruktor als ‘virtual’ zu deklarieren?
Wenn ein Objekt über einen Zeiger auf die Basisklasse gelöscht wird, stellt ein virtueller Destruktor sicher, dass der Destruktor der abgeleiteten Klasse aufgerufen wird, um Speicherlecks zu vermeiden.
Was ist eine Initialisierungsliste und warum wird sie verwendet?
Eine Initialisierungsliste im Konstruktor dient zur Initialisierung von Objektvariablen vor der Ausführung des Konstruktors und ist besonders effizient bei Konstanten und Referenzen.
Wann wird der Copy-Konstruktor automatisch aufgerufen?
Der Copy-Konstruktor wird aufgerufen, wenn ein Objekt mit einem anderen Objekt initialisiert wird, ein Objekt als Wertparameter übergeben wird oder ein Objekt von einer Funktion zurückgegeben wird.
Was sind die Vorteile der dynamischen Speicherverwaltung mit ‘new’ und ‘delete’?
‘new’ und ‘delete’ ermöglichen die flexible Zuweisung von Speicher zur Laufzeit. Sie sind nützlich, wenn die Größe von Datenstrukturen zur Compile-Zeit nicht bekannt ist.
Warum sollte der Zuweisungsoperator überladen werden, wenn der Copy-Konstruktor vorhanden ist?
Der Zuweisungsoperator sollte überladen werden, um eine tiefe Kopie zu ermöglichen. Ohne Überladung würde der Standardoperator eine flache Kopie durchführen, was zu Speicherproblemen führen kann.
Was ist der Unterschied zwischen einem Default-Konstruktor und einem benutzerdefinierten Konstruktor?
Ein Default-Konstruktor wird automatisch erstellt, wenn keine Argumente übergeben werden. Ein benutzerdefinierter Konstruktor ermöglicht die Anpassung der Objektinitialisierung durch Parameter.