C++ Flashcards
Was waren die Entwurfskriterien von C++?
möglichst kompatibel zu C
* Objektorientierung als neues Paradigma
* unkomplizierte Programmierung
* keine eingebauten High-Level-Datentypen und Operatoren,
aber durch Benutzerdefinition möglich
* hohe Laufzeit- und Speicherplatzeffizienz
* höhere Sicherheit
Gemeinsamkeiten von C und C++
Grobe Programmstruktur für imperative Programme ist identisch.
Neu: bool
- Präprozessor-Befehle (weniger relevant in C++)
- Deklaration von globalen Variablen
- Funktionsprototypen
- main()-Funktion
- Funktionsdefinitionen
Datentypen
* Aufzählungstypen (enum)
* Arrays
* Strukturen (struct) und Unions (union)
* Zeiger
Wesentliche Neuerungen in C++?
-objektorientierter Aspekte
-funktionale Aspekte
Überladen von Operatoren
* Neue Sicherheitsmechanismen
* Namensräume
* Templates
* Dynamische Speicherverwaltung mit Elementen der Programmiersprache
Unterschied zu Java in Bezug auf Speicherverwaltung?
Volle Verantwortung für die Speicherverwaltung
* Keine Garbage Collection
* Speicher muss selbst reserviert und freigegeben werden
* Abhilfe schaffen aber sog. Smart Pointer
Was macht das Schlüsselwort “auto”?
Das Schlüsselwort auto ermittelt automatisch den Typ einer Variable bei
ihrer Deklaration mit Initialisierung
Welche Funktion hat der static_cast?
Der Operator static_cast erlaubt die Umwandlung eines Typs in einen
anderen, sofern der Compiler eine Regel kennt.
Welche Funktion hat der reinterpret_cast?
Uminterpretation eines Typs
Zur Änderung des Typs eines Zeigers / Datenstruktur oder Variable
Welche Funktion hat der const_cast?
In C++ dient der const_cast dazu, die Konstanz eines Objekts aufzuheben oder wiederherzustellen.
Achtung: Mit dem Cast macht man aus einer unveränderlichen Größe
keine veränderliche
Welche Funktionen haben Namensräume?
Ermöglicht es gleichnamige Methoden und Variablen zu verwenden
Außerdem: Erlaubt Typen und Funktionen verschiedenen Bereichen
zuzuordnen, so dass sie namentlich auseinander gehalten werden können
Was ist eine Scope-Auflösung?
Der Scope-Resolution-Operator :: erlaubt den expliziten Zugriff auf eine
überlagerte globale Variable
Erkläre Referenzen
Eine Referenz ist ein Aliasname für eine Variable. Sie repräsentiert
dasselbe Objekt.
* Spart Kopien, ermöglicht echtes Call-by-reference, vermeidet Prüfungen gegen
Null-Zeiger (NULL, nullptr).
Ein Re-assignment ist nicht möglich!
Erkläre das RAII-Prinzip und von welchem C++-Konzept dies verwendet wird
Resource acquisition is initialization (RAII) oder „Ressourcenbelegung ist
Initialisierung“ ist eine Programmiertechnik, die Memory Leaks vermeidet.
Verwendet von Smart pointern!
Grundprinzipien:
* Reservierung von Speicher wird an den Konstruktor eines Objekts gebunden.
* Freigabe des Speichers erledigt der Destruktor.
* Objekte werden auf dem Stack gehalten. Dadurch automatische Freigabe des
Speichers, wenn Objekt vom Stack gelöscht wird.
* Keine direkte Verwendung von new und delete.
Welche Typen von Smart pointern gibt es?
Shared pointer speichert einen Zeiger, der einem oder mehreren Besitzern geteilt wird.
* Intern mit Reference counting umgesetzt: ein weiterer Besitzer (+1),
ein Besitzer weniger (-1), kein Besitzer mehr (delete-Aufruf)
* Unique pointer speichert einen Zeiger, der nur einem Besitzer zugeordnet ist.
* Keine Kopie, aber Übertragung an neuen Besitzer möglich
* Weak pointer ist eine „schwache“ temporäre Beziehung zu einem Zeiger
* Kein Besitzanspruch
* Originalobjekt kann vorhanden sein oder bereits entfernt worden sein
Welche Funktion hat der dynamic_cast?
Downcasts and Crosscasts über C-Casts sind ausgesprochen unsicher:
* Es erfolgt keine Typprüfung.
* Manche Compiler lassen Fehl-Casts „durchgehen“, was zu undefiniertem
Verhalten führt.
Rückgabewert:
* Bei zulässiger Konvertierung: umkonvertierter Typ
* nullptr, falls die Konvertierung nicht möglich war
Unterschiede Imperative und objektorientierte Sprachen
Imperativ:
Programm besteht aus einer Abfolge von Operationen, die jeweils Daten
bearbeiten.
* Variablenkonzept: Eingabewert in Variablen speichern und dann
weiterverarbeiten
Objektorientiert:
Alle zur Lösung des Problems erforderlichen Daten und Operationen werden zu
Objekten zusammengefasst.
* Objekte sind gleichberechtigte, aktiv handelnde Einheiten, die miteinander
kommunizieren, indem sie Botschaften senden und empfangen.
Welche Eigenschaften besitzt jedes Objekt nach dem Prinzip der Objektorientierung
Jede Objekt besitzt
* eine Identität,
* einen Zustand (Attribute),
* Operationen (Methoden)
Was sind die Prinzipien der Objektorientierung?
- Vererbung
- Polymorphie
- Abstrakte Datentypen
- Information Hiding
Welche Operatoren kann man nicht überladen?
Was machen die Zugriffsoperationen public, protected und private?
- public: Elemente, die als public deklariert sind, können von jeder Funktion oder Klasse, die eine Instanz der Klasse hat, aufgerufen werden.
- protected: Elemente, die als protected deklariert sind, können nur von der Klasse selbst oder von abgeleiteten Klassen aufgerufen werden.
- private: Elemente, die als private deklariert sind, können nur von der Klasse selbst aufgerufen werden. Weder abgeleitete Klassen noch andere Funktionen oder Klassen können darauf zugreifen.
Was ist der Nutzen von Initialisierungslisten?
Wie sind statische Member in C++ umgesetzt?
Was bewirkt das Schlüsselwort “friend”
Wie kann man auf Member der Oberklasse zugreifen?
Wie werden Namenskonflikte bei Mehrfachvererbung umgangen?
Man muss die Methode der Oberklasse expliziet aufrufen durch
“Oberklasse”::”Member”