Zum Inhalt springen

C++-Programmierung/ Einführung in C++/ Zusammenfassung

Aus Wikibooks


Ein C++-Programm beginnt mit der Hauptfunktion main().

Ein- und Ausgabe

[Bearbeiten]

Die Ein- und Ausgabe erfolgt in C++ über Streams, mehr dazu erfahren Sie in einem der folgenden Abschnitte. Um die Ein- und Ausgabe zu nutzen müssen Sie die Headerdatei iostream einbinden. Die Streamobjekte cin und cout liegen im Namensraum std. Auf Elemente innerhalb eines Namensraums wird mit dem Bereichsoperator :: zugegriffen.

#include <iostream>

int main(){
    std::cout << "Das wird ausgegeben.\n";

    int wert;
    std::cin >> wert;
    std::cout << "Wert ist: " << wert << std::endl;
}

endl fügt einen Zeilenumbruch ein und leert anschließend den Ausgabepuffer.

Mit der using-Direktive können auch alle Elemente eines Namensraums verfügbar gemacht werden.

#include <iostream>

using namespace std;

int main(){
    cout << "Das wird Ausgegeben.\n";

    int wert;
    cin >> wert;
    cout << "Wert ist: " << wert << endl;
}

Kommentare

[Bearbeiten]

Es gibt in C++ zwei Arten von Kommentaren:

// Kommentare über eine Zeile

/* und Kommentare über mehrere 
Zeilen*/

Rechnen

[Bearbeiten]

C++ beherrscht die 4 Grundrechenarten, die Operatoren lauten +, -, * und /. Es gilt Punkt- vor Strichrechnung und Klammern ändern die Auswertungsreihenfolge. Weiterhin bietet C++ mit dem Zuweisungsoperator kombinierte Rechenoperatoren:

lvalue += rvalue;
lvalue -= rvalue;
lvalue *= rvalue;
lvalue /= rvalue;

Für Ganzzahlige Datentypen stehen weiterhin der Inkrement- und der Dekrementoperator, jeweils in einer Prä- und einer Postfixvariante zur Verfügung:

++lvalue; // Erhöht den Wert und gibt ihn zurück
lvalue++; // Erhöht den Wert und gibt den alten Wert zurück
--lvalue; // Erniedriegt den Wert und gibt ihn zurück
lvalue--; // Erniedriegt den Wert und gibt den alten Wert zurück

Die Rückgabe der Präfixvariante ist ein lvalue, die Postfixvariante gibt ein rvalue zurück.

Variablen

[Bearbeiten]

Die Syntax zur Deklaration einer Variable lautet:

Syntax:
«Datentyp» «Name»;
«Nicht-C++-Code», »optional«

Datentypen

[Bearbeiten]

Die C++-Basisdatentypen sind:

  • Typlos
    • void (wird später erläutert)
  • Logisch
    • bool
  • Zeichen (auch Ganzzahlig)
    • char (signed char und unsigned char)
    • wchar_t
  • Ganzzahlig
    • short (signed short und unsigned short)
    • int (signed int und unsigned int)
    • long (signed long und unsigned long)
  • Gleitkommazahlen
    • float
    • double
    • long double

Die Typmodifizierer signed und unsigned geben an, ob es sich um einen vorzeichenbehafteten oder vorzeichenlosen Typ handelt. Ohne diese Modifizierer wird ein vorzeichenbehafteter Typ angenommen, außer bei char. Hier ist es Implementierungs­abhängig. signed und unsigned können ohne Datentyp verwendet werden, dann wird int als Typ angenommen.

Das Schlüsselwort const zeichnet einen Datentyp als konstant aus. Es gehört immer zu dem, was links davon steht, es sei denn, links steht nichts mehr, dann gehört es zu dem Teil auf der rechten Seite. Es ist somit egal, ob Sie const vor oder hinter einen Basisdatentypen schreiben:

Syntax:
const «Datentyp» «Variablenname»;
«Datentyp» const «Variablenname»;
«Nicht-C++-Code», »optional«

C++ macht keine Angaben über die Größen der Datentypen, es ist lediglich folgendes festgelegt:

  • char <= short <= int <= long
  • float <= double <= long double

Initialisierung

[Bearbeiten]

In C++ gibt es 2 Möglichkeiten für eine Initialisierung:

Syntax:
Datentyp «Variablenname» = «Wert»;
Datentyp «Variablenname»(«Wert»);
«Nicht-C++-Code», »optional«

Die erste Variante ist verbreiteter, aber nur möglich, wenn zur Initialisierung nur 1 Wert benötigt wird. Alle Basisdatentypen erwarten genau einen Wert.

Typaufwertung

[Bearbeiten]

Wird ein Operator auf verschiedene Datentypen angewendet, müssen vor der Operation beide in den gleichen Typ konvertiert werden. Der Zieltyp ist üblicherweise der kleinste, der beide Werte darstellen kann. Für genauere Informationen lesen Sie bitte im Kapitel Rechnen mit unterschiedlichen Datentypen.

Kontrollstrukturen

[Bearbeiten]

Anweisungsblöcke

[Bearbeiten]

Mit einem Anweisungsblock können mehrere Anweisungen zusammengefasst werden. Er kann überall stehen, wo auch eine Anweisung stehen könnte. Die Syntax sieht folgendermaßen aus:

Syntax:
{
    «Anweisung»
    «...»
}
«Nicht-C++-Code», »optional«

Verzweigung

[Bearbeiten]

Eine Verzweigung hat in C++ folgende Syntax:

Syntax:
if(«Bedingung»)
    «Anweisung»
else
    «Anweisung»
«Nicht-C++-Code», »optional«

Die Bedingung ist immer ein logischer Wert. Zahlenwerte werden implizit in logische Werte konvertiert. 0 entspricht dabei immer false, alle anderen Werte werden zu true umgewandelt.

Schleifen

[Bearbeiten]

Es gibt 3 Arten von Schleifen. Prinzipiell lässt sich in C++ jede der 3 Arten durch jede der jeweils andere simulieren. Allerdings kann je nach Anwendungsfall, rücksichtlich der Tipparbeit, einer der drei Arten am praktischsten sein.

Syntax:
// while-Schleife (Kopfgesteuert)
while(«Bedingung»)
    «Anweisung»

// do-while-Schleife: Alle Anweisungen werden mindestens einmal ausgeführt. (Fußgesteuert)
do
    «Anweisung»
while(«Bedingung»);

// for-Schleife: Ermöglicht die Initialisierung, die Bedingung (Kopfgesteuert) und eine Aktion,
// die nach jedem Schleifendurchlauf stattfindet, im Schleifenkopf zu platzieren
for(«Deklarationen (z.B. Zählvariablen)»; «Bedingung»; «Aktion nach einem Durchlauf (z.B. hochzählen)»)
    «Anweisung»
«Nicht-C++-Code», »optional«

Auswahl

[Bearbeiten]

Mit der switch-Anweisung kann eine Variable auf mehrere (konstante) Werte verglichen werden. Jedem dieser Werte können eine oder mehrere Anweisungen folgen, welche im Falle einer Übereinstimmung ausgeführt werden, bis das Ende des switch-Blocks erreicht wird.

Syntax:
switch(«Variable»){
    case «Wert»:
        «Anweisung»
        «...»
        »break;«

    «...»

    default: // Wird ausgeführt, falls die Variable keinem der Werte entsprach
        «Anweisung»
        «...»
}
«Nicht-C++-Code», »optional«
Hinweis

Wird das break; am Ende eines Anweisungsblockes weggelassen, werden auch die darauf folgenden Blöcke ausgeführt, bis ein break; gefunden oder das Ende der switch-Anweisung erreicht ist.