Inhaltsverzeichnis

Variablen

Typ Wertebereich Byte Beschreibung
unsigned short int0-655352Ganzzahlen ohne Vorzeichen bis 65535
short int-32768 bis 327682Positive und Negative Ganzzahlen
unsigned long int0-42949672954Positive Ganzzahlen bis 4294967295
long int-2147483648 bis 21474836474Positive und negative Ganzzahlen
charZeichen1Ein Zeichen
float1,2e-38 bis 3,4e384Bruchzahlen/Kommazahlen im negativen und positiven Bereich
double2,2e-308 bis 1,8e3088Bruchzahlen/Kommazahlen im negativen und positiven Bereich
boolTrue/False ? Wahrheitswert - True → Wahr, False → Unwahr



unsigned → ohne Vorzeicehn, es lassen sich nur positive Werte abbilden

Konstaten

const Typ Bezeichner = Wert

Operatoren

Arithmetische Operatoren

Name Beschreibung
Decrement
++Increment
+=Zuweisung und Addition

Wert vor dem = wird mit dem Wert hinter = addiert und in der Variable vor = gespeichert.

a+=2 → a=a+2;
-=ZUweisung und Substraktion

Siehe +=
*=Zuweisung und Multiplikation

Siehe +=
/=Zuweisung und Division

Siehe +=
%=Modolu und Zuweisung

Rest einer Division
==Vergleichsoperator

Logische Operatoren

Name Beschreibung
&& Logisches Und
||
Logisches Oder
!Logisches Negieren - Ausdruck ist wahr, wenn die Bedingung unwahr ist

Beispiele: \\if (!(a==5))
if (a!=5)

Tertiär-Operator


Syntax: (Bedingung)?Wert wenn True:Wert wenn false;

Sonstige Operatoren

Function/Kommando Erklärung
static_cast<Typ>(Variable) Temporäre Typumwandlung

Bei einigen Operationen (zum Beispiel Division müssen Ganzzahlen in Float umgewandelt werden um Brüche zu erhalten) müssen Variablen eines Typs temporär in Variablen eines anderen Typs umgewandelt werden.


Syntax: static_typecast<Typ>(Variable)

Typ: Typ in den umgewandelt werden soll (int, fload, char usw.).

Hinweis: Offensichtlich kann man nicht mehrere Variablen mit einmal umwandeln. Aktionen wie static_typecast <float> (a / b) funktionieren nicht.
typedef Typ NeuerName Definiert einen anderen Namen für einen Variablentyp.

Hinweis: typedef definiert keine neuen Variablentypen, es ermöglicht nur einen anderen Namen für einen vorhandenen Typ zu definieren (zum Beispiel einen kürzeren).

Syntax: static_typecast Typname Neue Bezeichnung
Beispiel: typedef unsigned short int usint

Typname: Name des vorhandenen Typs
Neue Bezeichnung: Benutzerdefinierte Bezeichnung für den Typen

Methoden/Befehle

Konstrukte

Klassen/Methoden

Deklaration:

class //Klassenname//
{
      Private:
                //Variablen-Deklaration1//;
                //Methoden-Deklaration1//;
      Public:
               //Variablen-Deklaration2//;
               //Methoden-Deklaration2//;
};

//Rückgabetyp// //Klassenname//:://Methodenname(//Parameterliste//)
{
         Code;
}
class Testklasse
{
     Private:
               int rechnen(int, int);
               int ergebnis;
     Public:
               void ausgabe ()
};

int Testklasse::rechnen(int a, int b)
{
       int p_return;
       p_return=a+b;
       return(p_return);
}


Achtung: KLassendefinitionen müssen nach der letzten Klammer } mit ; abgeschlossen werden (Klassenmethoden nicht).

Konstruktoren



Syntax:

class Klassenname
{
      public: Klassenname();
      KLassendefinitioon;
};

Klassenname::Klassenname ()
{
    Code;
}

Destruktoren

Syntax:

class Klassenname
{
          public: ~KLassenname
}

Klassenname::~KLassenname()
{
         Code;
}

Konstante Methoden


Syntax:

class Klasse
{
        public:
                 Rückgabetyp Methode() const;
}

Rückgabetyp Klasse::Methode() const
{
     Code;
}

while-Schleife

Syntax:

while (Bedingung)
{
       Code;
}
while (i<8)
{
        cout << "Der Wert des Zählers ist: " << i;
}

Eine Sonderbedingung ist true, sie führt zu einer Endlosschleife, die mit break abgebrochen werden muss.

Begriffe

Begriff Erklärung
PräprozessorLäuft vor dem Compiler - bereitet den Quellcode für den Compiler vor/bindet Quellcode-Bibliotheken ein

Es kann Quellcode (das schließt Quellcode-Bibliotheken ein) aus anderen Dateien eingebunden werden oder Code-Teile von der Compilierung ausgeschlossen werden


Code für den Präprozessor wird mit vorangestellter # gekennzeichnet.

Zum Beispiel #include <iostream>
CompilerÜbersetzt den Quellcode in Maschinencode

Es enstteht eine Objekt-Datei (obj)
LinkerLäuft nach dem Compiler - fügt statische Bibliotheken ein
Dynamischer LinkerLädt zur Laufzeit dynamisch gelinkte Bibliotheken die das Programm benutzt
BibliothekEine Datei die Funktionen/Methoden/Klassen zur Verfügung stellt auf die der Programmierer zugreifen kann

Sammlung von zusammengehörigen (thematisch) Funktionen/Methoden und Klassen die der Programmierer in seinem Programm nutzen kann ohne sie selbst zu definieren.

Es wird nur auf irgend eine Weise definiert welche Bibliotheken genutzt werden sollen und im Code wird die Methode/Klasse/Funktion einfach benutzt ohne die irgend wo zu definieren.
Präprozessor bzw. Linker sorgen dann dafür das die entsprechenden Funktionen in den Code wandern oder beim Aufruf in den Speicher geladen werden.


Es gibt Quellcode-Bibliotheken, Statische Bibliotheken und Dynamische Bibliotheken → Erklärung siehe unter cplusplus#Bibliotheken
L-Wert / R-WertLinker Wert, Rechter Wert - bezeichnet die Werte vor dem = und hinter dem = bei einer Operation
KlientenBenutzer von Klassen
Elementvariablen / Datenelemente / AttributvariablenVariablen innerhalb einer Klasse
Methoden / ElementfunktionenFunktionen die zu einer Klasse gehören
KlientenAndere Objekte die au ein Objekt zugreifen → sind Klienten des Objektes

Bibliotheken

* stellen dem Programmierer fertige Funktionen/Klassen/Methoden zur Verfügung, die er nicht selbst erstellen muss * 3 Arten von Bibliotheken

Typ Beschreibung Dateiendung
Quellcode-BibliothekDie Funktion/Klasse/Methode liegt als Code vor.

* Im Code durch #include Bibliotehksname eingebunden
* Wird durch den Präprozessor als Code eingebunden und mitcompiliert
.h?
Statische BibliothekDie Funktion/Klasse/Methode liegt als kompilierte Version vor.

* Wir durch Linker nach dem Compilieren als Maschinencode in die ausführbare Datei eingebunden
.a → Unter Unix-Systemen
Dynamische BibliothekDie Funktion/Klasse/Methode liegt als kompilierte Version vor - wird zur Laufzeit ins Programm eingebunden

* Bibliothek und damit die Definition der Klasse/Methode/Funktion ist nicht im Maschinencode des Programms, sondern in externer Binärdatei
* Einbinden übernimmt der dynamische Linker/Binder während das Programm ausgeführt wird
* dll (Dynamic Link Library)→ Windows
* so (Shared Object) → Unixoden Systemen

Präprozessor

Direktive Bedeutung
#include <file-name>Bindet eine Bibliothek ein.

Wenn die Dtaei in <> steht sollten global (alle Verzeichnisse die der Präprozessor kennt) alle Verzeichnisse durchsucht werden
#defineDefiniert eine Konstanze - sollte nach Möglichkeit nicht benutzt werden

Syntax: #define Bezeichner Wert

Der Präprozessor ersetzt alle vorkommen des Bezeichners im Code durch den angegebenen Wert vor dem compilieren.

Hinweis: Sollte nicht genutzt werden, da der Compiler die Typenzuweisungen nicht prüfen kann (sind ja keine Typen angeben). Statt dessen sollte const (sie Variablen genutzt werden)

Namenskonvention

Namenskonvention ist nicht vorgeschrieben und jeder kann seine eigene haben → aber man sollte eine haben, da man sonst nicht mehr durchsieht was ein Objekt ist, was eine Variable welchen Typs ist und in welchen Rahmen eine Variable gültig ist.

Bezeichnung Konvention
Klassecname
Globale VariableTypBezeichner

Typ=Erster Buchstabe des Typs der Variable (zum Beispiel bei int i) \\Bezeichner=Sprechender Name der Variablen
Elementvariable / AttributitsTypBezeichner

its=Zeigt an das es sich um ein Attribut/Elementvariable handelt → its (seine Variable → die des Elements)
Type=Erster Buchstabe des Typs der Variable (zum Beispiel bei int i)
Bezeichner=Sprechender Name für die Variable

Hinweise/Troubleshooting

Problem Beschreibung
gcc wirft Fehler „undefined Reference to xyz“gcc ist der C-Compiler der GNU Compiler Collection, g++ ist der C++-Compiler
g++ xyz was not declared in this scopeNamespace nicht angegeben

Meist fehlt der Standard-Namespace - unterhalb der #include-Anweisungen muss „using namespace std;“ angeben werden
return-value does not allow definitionMöglicherweise KLassendefinition nicht mit ; abgeschlossen

Internas

Funktionsaufruf

Folgendes passiert nacheinander:



Ist die Funktion durchgelaufen passiert folgendes:



Alle Daten der Funktion sind vom Stack entfernt.
Der Stack wird immer der Reihenfolge nach belegt und wieder gelöscht.