C++ Flashcards
Welche Art von Programmiersprache ist C++?
Kompilierte Programmiersprache
Was sind Unterschiede von C++ zu C#?
Klassen werden in zwei Dateien geschrieben (Deklaration .h, Defintiion .cpp)
Memory Management muss selbst gemacht werden (Pointer!)
Mehrfachvererbung
Keine Interfaces
Keine Delegates
Was macht der Compiler?
Dieser geht einmal den gesamten Code durch und baut sich Object Files zusammen - falls hier Fehler entstehen, kommt es zu Linker-Errors.
Was macht der Linker?
Der Linker ersetzt Placeholder mit echtem Code und baut diesen in die Executable ein
Was ist ein Preprocessor?
Code oder Macros, die vor der Kompilierung ausgeführt werden
Wie ist der Speicher aufgeteilt?
Globaler Speicher (fixe Größe, enthält globale Variablen) und der Stack (lokale Variablen und Function Calls - verlässt man den Scope wird alles vom Stack freigegeben)
Was sind Pointer?
Pointer sind Adressdatentypen, die auf Daten im Speicher zeigen (Pointer haben den selben Datentyp wie die Daten, auf die sie zeigen)
Was ist der Address Of Operator? Was ist der Dereference Operator?
& = Address Of Operator, wo auf die Speicheradresse direkt zugegriffen werden kann
* = Dereference Operator, mit dem man auf Daten hinter einer Adresse zugreifen kann
Was ist die Schnellschreibweise des Dereference Operators?
student->id (statt (*student).id)
Wie funktionieren Pointer in Arrays?
Pointer können auf spezifische Zellen im Array zeigen –> mit Pointer Arithmetik kann man dann einfach auf andere Zellen springen
Was ist Pointer Arithmetik?
Durch das Dazurechnen von Werten in Adressen kann einfach im Speicher herumgesprungen werden (Verwendung bei Arrays für Iteration)
Was ist der Heap?
= Dynamischer Speicher, alle Daten die mit new angelegt werden
Daten die mit new angelegt werden, müssen mit delete wieder freigemacht werden (verhindert Memory Leaks)
Wie werden Referenzen an Methoden übergeben?
& beim Parameter hinzufügen (mit const garantiert man, dass die Referenzen sich nicht verändern)
Dies ist besser für die Performance, da dann die Objekte nicht kopiert werden
Was ist der grundlegende Unterschied zwischen Klassen und Structs?
Bei Klassen ist die Sichtbarkeit standardmäßig private, bei Structs public
Wie kann der Default-Konstruktor in C++ gelöscht werden?
Konstruktor() = delete;
Welche Methoden werden bei C++ Klassen automatisch generiert?
Leerer Default-Konstruktor: Konstruktor()
Destructor: ~Konstruktor() –> kein Rückgabewert, wird automatisch aufgerufen on delete
Copy Constructor: Konstruktor(const Konstruktor& rhv)
Copy Assignment Operator: Konstruktor& operator= (const Konstruktor& rhv)
Wie funktionieren Deep Copies in C++?
Über den Copy Konstruktor - dieser muss selbst definiert werden und enthält immer eine const Referenz als Parameter
Was ist Copy by Assignment in C++?
Daten werden kopiert, aber die alten Daten werden auch gleichzeitig gelöscht
Was ist die grundlegende Reihenfolge bei Copy by Assignment Programmierung?
Zuerst Self-Assignment checken
Bereits assigned Data frei machen, wenn das Objekt die Data besitzt
Referenz zum Target Objekt zurückgeben für Ketten-Assignments
Wann verwendet man Deep Copy? Wann Shallow Copy?
Shallow copy für Objekte, die keine Pointer verwenden
Deep copy für Objekte, die Pointer enthalten
Was ist die C++ Rule of Three?
Wenn eines der Folgenden definiert ist, dann sollten die restlichen Methoden ebenso implementiert werden:
Destructor
Copy Constructor
Copy Assignment Operator
Wie verhindert man das Kopieren von Klassen in C++?
Beim Copy-Constructor und Copy Assignment Operator “= delete;” anhängen