C++ Befehle(11/8/1996)
Textausgabe

cout<<”text”;(iostream.h)Textausgabe an den Bildschirm

cout<<variable;(iostream.h)Ausgabe einer Zahl an den Bildschirm

cout.width(x);(iostream.h)Angabe bis wohin der nächste Text gehen wird

clrscr();(conio.h)Gesamten Text im Fenster löschen (cls)

_settextposition (y,x); (conio.h)Sprung im Text zu der angegebenen Stelle, oben ist (1,1)

clreol();(conio.h)Löscht Zeile ab Cursor (bis zum Ende der Zeile)

cout << sizeof(12.f),sizeof (iostream.h)Gibt die Speichergrösse von 12(float), dem Wort XXX, ... an

XXX”),

textcolor (10);(conio ,iostream.h)Legt Textfarbe fest

textbackground (3);(conio, iostream.h)Legt Texthintergrundfarbe fest

_settextposition( 1040 );(iostream.h)Setzt Cursor an die angegebene Stelle ((1,1) ist ganz oben)

Eingabe und Ausgabe

cerr << ”Fehlermeldung”;(iostream.h)Auf cerr werden Fehlermeldungen geschickt. (auf den Bild-

schirm normalerweise, das kann man aber ändern)

clog << ”andere Fehler”;(iostream.h)Fast das selbe wie cerr. Einziger Unterschied: Pufferung.

cout << flush(iostream.h)Bewirkt dass der Puffer geleert wird

cout.width (42)(iomanip.h)Bewirkt dass über <<eingegebenen Daten in Breite 42 Zeichen aus-

gegeben werden. Rest wird mit Leerstellen links ausgefüllt. 

cout << setw(10<< ”...”(iomanip.h)Links wird mit Leerzeichen aufgefüllt um Breite 10 zu erreichen

cout.fill('.');(iomanip.h)Anstatt mit Leerzeichen wird (hier) mit . aufgefüllt. Mit

cout.fill(' '); stellt man wieder auf Leerzeichen zurück.

cout << setfill ('.') << ...(iomanip.h)Wie cout.fill: Füllzeichen wird hier der Punkt

setiosflags(ios::left)(iomanip.h)Ausrichtung der Daten wird auf linksbündig geändert.

resetiosflags(ios::left)(iomanip.h)setiosflags rückgängig machen

cout.setf(ios::fixed);(iomanip.h)Jede Zahl wird mit gleich viel Nachkommazahlen angezeigt

(nicht Exponentialdarstellung).cout.precision vorher benutzen

cout<<setiosflags(ios::showpos)(iomanip.h)Auch bei positiven Zahlen wird das Vorzeichen angezeigt

cout<<setiosflags(ios::internal)(iomanip.h)Füllzeichen werden zwischen Vorzeichen und Zahl eingeschoben 

cout<<resetiosflags(iomanip.h)Mit resetiosflags können mehrere Dings gleichzeitig ein- bzw

(ios::... | ios: ...)ausgeschaltet werden.

cout << dec oder hex oder oct(iomanip.h)Zahlen werden ins entsprechende Zahlensystem umgewandelt

cout<<setiosflags(ios::upperc(iomanip.h)Zahlen werden in Grossbuchstaben ausgegeben (keine aus

ase);dem Dezimalsystem!)

cout<<setiosflags(ios::showbase)(iomanip.h)Zahlen werden in Programmierernotation ausgegeben

if(cin.fail()){...}oder if(!cin)(iostream.h)Testet auf schwere oder behebbare Fehler. Schliesst bad() ein.

if(!cin.fail()) oder if(cin)(iostream.h)Das Gegenteil von if(!cin), schliesst EOF nicht aus.

cin.bad()(iostream.h)Testet auf schwere, nicht behebbare Fehler.

cin.eof()(iostream.h)Testet auf Dateiende bzw. 0x1A im Datenstrom.

cin.good()(iostream.h)Testet auf Fehlerlosigkeit

clear()(iostream.h)Fehlerinformation zurücksetzen.Zur Fehlersimulation)kann in 

den Klammern ios::failbit, ios::badbit oderios::eofbit stehen

cin.seekg (0L,ios::end)(iostream.h)Restdaten werden übersprungen (Zeiger wird zum Stromende

verschoben).0(long) ist die Distanz zu end.

cin.seekg (0L,ios::cur)(iostream.h)Nichts ändert sich (cur=current)

cin.seekg (0L,ios::beg)(iostream.h)Zeiger wird zum Stromanfang verschoben (beg=begin)

while((cin.peek())>57 || cin.(iostream.h)Untersucht eingegebene Zeichen (ASCII); falls es keine

peek()<48) cin.ignore();Zahlen sind werden sie erbarmungslos ausgemerzt.

cin.getline(text,127);(fstream.h)Das Eingegebene wird in text kopiert bis zum nächsten Return (mit-

samt Abständen). (?) Der dritte Parameter ist standardmässig ‘\n’ cin.get(text,127);(fstream.h)Das Eingegebene wird in text kopiert bis zum nächsten Return.

Grafik

_setvideomode(_VRES256COLOR)(graph.h)In den 640x480x256-Modus wechseln

_setvideomode(_TEXTBW80);(graph.h)In den Textmodus zurückwechseln

_setcolor (fa)(graph.h)Die Farbe festlegen mit der gezeichnet wird

_setviewport(xt,yt,xb,yb)(graph.h)Ausschnitt festlegen worin gearbeitetwird; (xt,yt) wird zu (0,0)

_moveto(x,y)(graph.h)Sich an die Stelle (x,y) setzen, bspw um eine Linie zu beginnen

_lineto(x,y)(graph.h)Eine Linie zeichnen bis zu (x,y)

_rectangle(_GBORDER, xt,yt,(graph.h)Ein Rechteck zeichnen; das Innere unverändert lassen

xb,yb)

_rectangle(_GFILLINTERIOR, (graph.h)Ein gefülltes Rechteck zeichnen

xt,yt,xb,yb)

_ellipse(_GBORDER,x1,y1,x2,x2)(graph.h)Zeichne einen Kreis oder eine Ellipse, ungefüllt. Darf nicht eine

Linie oder ein Punkt sein. _GFILLINTERIOR für gefüllt

struct textsettings ts;(graph.h)Mache die grafischen Schriften verfügbar

_gettextsettings( &ts );

_setcharsize (dy,dx)(graph.h)Lege Höhe und Breite eines grafischen Buchstabens fest

_grtext( x, y, "Watcom")(graph.h)Schreibe beginnend an der Stelle (x,y) (oben links ersten

Buchstabens), grafisch den angegebenen Text

char *nam¿ nam = (char*) malloc(_imagesize(0,0,640,120)); ¿ _getimage(0,0,640,120,nam);

(graph.h)Mache Platz im Speicher frei für das Bild nam; lese es

anschliessend vom Bildschirm ein

_putimage(190,90,nam,_GPSET);(graph.h)Setze Bild nam an diese Stelle, überschreibe die alte Stelle

(_GPRESET: invertiert; _GAND: Pixelwerte zusammenzählen; _GOR: zusammen-or-en; GXOR: für Animationen

free( nam );(graph.h)Den Speicherplatz den nam einnahm wieder freimachen

_getpixel( xy );(graph.h)Farbe des aktuellen Pixels ermitteln

_setpixel( xy );(graph.h)Farbe des aktuellen Pixels ändern

Dateien

ofstream Ausgabe;(iomanip, fstream.h)Der argumentlose Konstruktor erzeugt das Objekt Ausgabe

Ausgabe.open(datei1,ios::app)(iomanip, fstream.h)datei1 (= Name der Datei) wird geöffnet, Zeiger wird an

Dateiende gesetzt (damit man anhängen kann)

Ausgabe.close();(iomanip, fstream.h)Ausgabe wird wieder freigemacht. (und Datei geschlossen)

ofstream Ausgabe2(datei2,ios(iomanip, fstream.h)Konstruktor wird sofort mit 2 Argumenten aufgerufen, Zeiger

::ate)wird an den Anfang der Datei gesetzt.

DateimodusBeschreibung

ios::inLesen, verhindert bei Ausgabedateien Löschen

ios::nocreateKein Anlegen fehlender Dateien

ios::outSchreiben; ohne Angabe weiterer Modi werden vorhandene Dateien gelöscht

ios::appAusgabe an Datei anhängen

ios::ateAusgabe an Datei anhängen, erlaubt nach erster Schreibanweisung Verschieben des

Dateipointers

ios:noreplaceKeine vorhandene Datei überschreiben

ios::truncVorhandenen Dateiinhalt löschen

ifstream test¿ test.open(te(iomanip, fstream.h)Testet ob eine Datei existiert (löscht oder ändert nichts und

xt,ios::in|ios:nocreate);legt auch keine neue Datei an falls nicht vorhanden)

if (test.good()) ¿ cout ... (iomanip, fstream.h)Falls der Test in der vorigen Zeile gut ausgefallen war, tue ...

eingabe.seekg (0L,ios::end)(iomanip, fstream.h)Pointer wird an das Ende gesetzt (-5L,ios::cur würde Pointer

¿um 5 Bytes Richtung Anfang versetzen)

cout <<eingabe.tellg()(iomanip, fstream.h)Gibt hier die Dateigrösse aus (Position des Zeigers ab Start)

streampos pos1,pos2(iomanip, fstream.h)Deklaration von Variablen des Typs streampos

ausgabe << ”text”(iomanip, fstream.h)Der Text text wird an das Objekt ausgabe geschickt (wo

xxx.seekp(pos1,ios::beg)(iomanip, fstream.h)Dateizeiger wird an die in per streampos initialisierte

Variable Stelle pos1 gesetzt. ios::beg muss so da stehen.

ofstream Drucker(”PRN”,ios::o (iomanip, fstream.h)Alles was auf cout geschickt wird kommt zum Drucker raus

ut|ios::app);cout=Drucker;

ofstream drucken(”PRN”,ios::o(iomanip, fstream.h)Alles was auf drucken geschickt wird wird gedruckt

ut|ios::app)

zeichen=eingabe.get() oder(iomanip, fstream.h)Das einzelne Zeichen worauf der Zeiger sich befindet wird in

eingabe.get(zeichen)zeichen kopiert

ausgabe.put(neuzeichen)(iomanip, fstream.h)Das Zeichen worauf der Zeiger sich befindet wird durch

neuzeichen ersetzt.

MethodeBeschreibung

closeSchliesst eine Datei

getLiest Zeichen und lässt Stoppzeichen im Datenstrom

getlineLiest Zeichen und entfernt Stoppzeichen aus Datei

ignoreEntfernt Zeichen aus dem Datenstrom

openInitialisiert das Objekt und öffnet eine Datei

peekPrüft nächstes Zeichen im Datenstrom, ohne zu lesen

putSchreibt ein einzelnes Zeichen

readLiest Datenblock in einen Speicherbereich

seekg,seekpBewegt Dateizeiger

tellg,tellpErmittelt Dateizeigerposition

writeSchreibt einen Speicherbereich als Datenblock

Escape - Sequenzen

cout<<endl;odercout<<”\n”;(iostream.h)Zeilensprung bei Textausgabe;endl leert ausserdem den Puffer

cout<<”\t”(iostream.h)Tab, springt zu Position9, 17, 25, 33, ...

cout<<”\r”(iostream.h)Wagenrücklauf, Cursor kommt an Anfang der Zeile

cout<<”\v”(iostream.h)Vertikaler Tabulator (?)

cout<<”\b”(iostream.h)Backspace, ein Zeichen wird gelöscht

cout<<”\f”(iostream.h)Formfeed, neue Seite (?)

cout<<”\\.........”(iostream.h)Schreibt ein \,ein ",ein '

cout<<”\a”; oder cout<<”\007”;(iostream.h)Gibt Alarm (ein sehr kurzer Piepser)

Textverarbeitung

char x=65y='B';(iostream.h)x ist 65, also das ASCII-Zeichen A, und y ist 66, B.

char datei1 []abc.xyz”(iostream.h)datei1 mit Text füllen

class string xxx¿xxx...”(cstring.h)einen String festlegen, und ihn dann mit Text füllen

text2=text3;(cstring.h)text3 in text2 kopieren (strings)

size_t x¿ x=text.find(”i”);(cstring.h)x erhält die Zahl der Position -1 wo sich i im string text befin-

det, falls n.v. 65535 (Trick: x++, dann ist x 0 falls n.v.)

strcat (text,fcvt(Zahl,0,(string.h)Hänge eine Zahl an einen Text an, die Zahl wird in Text

&dec,&sign));verwandelt (vorherige Initialisierung nötig) 0 ist die

Anzahl der Nachkommastellen.(vorher: int dec,sign;)

,fcvt( ,0,&dec,&sign));

Interface

cin >>variable;(iostream.h)Gabe des eingetippten Wertes an die Variable

char wort [20]; ¿cin >>wort;(string.h)Gabe des eingetippten Wortes an den char

getch();(conio.h)Pause bis Taste gedrückt wird

if (kbhit()){break;}(stdio.h, conio.h)Abbruch sobald eine Taste gedrückt wird; im Gegensatz zu

getch wird Computer bei Kontrolle nicht angehalten

Anschliessend kann getch die Taste ermitteln.

char tast; ¿ tast=cin.get();(iostream.h)Nimmt die nächste Taste die der User drückt in tast auf(?)

var=getch()-48;(conio.h)var erhält den Wert der nächsten Ziffer die gedrückt wird

Arrays

int/float/... test[3][5][5];(iostream.h)Festlegen eines (mehr)dimensionalen Arrays (Feldes). Die

Arrays hier im Beispiel heissen von[0][0][0] bis[2][4][4]

test [2][4][4]17(iostream.h)Wertzuweisung an ein Array

int test [][2]={{1},{3,4}};(iostream.h)test[0][0] erhält den Wert 1, [0][1] 0 (nicht definiert), [1][0] 3

und[1][1] 4. Diese Arrays werden automatisch erschaffen.

char t[6]¿t[0]=’x’¿...t[4]=’\o’(iostream.h)Festlegen des Arrays(für Text). ‘\0’ ist die Endemarkierung.

xxx=text1.compare(text2);(cstring.h)beide strings werden alphabetisch verglichen; falls beide gleich

sind wird xxx 0, sonst einen anderen Wert

strcpy(testHallo”);(string.h)Ein vorher definiertes leeres String wird mit Hallo\0 gefüllt.

strcat(test Welt!”);(string.h)An ein bestehendes Array wird angehängt, \0 wird verschoben

strncat (test, ”Hallo”,3);(stdio.h, string.h)Ans Array werden die ersten 3 Zeichen von Hallo angehängt

cout << strlen(test);(string.h)Ermittelt die Länge des Textes im Array, ohne die binäre Null

char test[]=”text”;(iostream.h)Füllt das Array mit “text”, und setzt seine Grösse fest (hier 5!)

int * pFeld = new int [zahl];(iostream.h)Kreiert das Array pFeld mit der Grösse [zahl]

const int a=50 ¿ int arra[a];(iostream.h)Ohne const ist es nicht möglich arra mit der Grösse afestzulegen

Strukturen und Verbunde

struct artikel{int ArtNr;(iostream.h)Festlegen der Struktur artikel

double Umsatz ...;};

artikel xyz;¿ xyz.ArtNr=20;(iostream.h)Eingabe der Werte für die Struktur artikel

xyz.Umsatz=234573.98;

union ... (siehe struct)(iostream.h)Wie struct, bloss dass alle Werte ineinander liegen (man

braucht nicht allen Komponenten einen Wert zuzuweisen

Kontrollstrukturen

if(a==b){1.;}else{2.;}(iostream.h)Falls Bedingung zutrifft, tue 1., sonst 2.

if (text1==”Michel”) {... ;}(cstring.h)Falls string text1 Michel ist, dann …

if ((a)||(b)), ((a)&&(b)) {;}(iostream.h)||: oder, es genügt dass eine von zwei, drei,…zutrifft, &&: und

for(i=a;i<=b;i++){...(iostream.h)Beginne bei a, zähle jedesmal 1 hinzu und höre bei b aufdie

{} auszuführen

while(bedingung){anweisung;}(iostream.h)Solange Bedingung zutrifft, führe Anweisung aus

do{anweisung;}while(bedingu);(iostream.h)Wie while, bloss dass anweisung einmal mehr ausgeführt wird

a=bedingung?wert1:wert2;(iostream.h)Falls Bedingung zutrifft erhält a den Wert1, sonst den Wert2.

marke:...¿ goto marke;(iostream.h)Zur Markierung springen, nur innerhalb einer Funktion

longjmp(setjmp.h)Wie goto, jedoch auch ausserhalb einer Funktion

switch(x)¿{case 1: case 4: (iostream.h)x hat einen vorher eingegebenen Wert, falls x 1oder 4 ist wird ab

... case 2:¿ ... ¿ ...}case 1 ausgeführt, ist x 2 ab case 2 usw…(geht auch mit char)

innerhalb der switch keine Variablen initialisieren (vorher!!!)

break;(iostream.h)Ausstieg aus einer switch-, for-, do-, oder while-Schleife

for (...){¿ if(x==2)continue(iostream.h)Beim continue wird was in der Schleife folgt nicht ausgeführt,

cout << x;}und sofort zum for zurückgekehrt (kein Schleifenabbruch)

Funktionen und Pointer

void funktion(int)(iostream.h)Funktion liefert keinen Wert zurück

void funktion(void)(iostream.h)Funktion wird ohne Wertangabe aufgerufen

return x(iostream.h)Funktion gibt den Wert x zurück

return(iostream.h)Markiert das Ende der Funktion

void Linie(char x, int zahl=9)(iostream.h)Falls Funktion ohne Zahl aufgerufen wird, wird diese 9

void...(...) ¿¿void...(...){(iostream.h)Prototyp, jede Funktion musseinmal imVoraus definiert werden

static wert=999(iostream.h)Globale Variable (innerhalb Funktion) deklarieren. Innerhalb einer

Klasse: nur eine Instanz für alle Klasseninstanzen (->Zählvariable)

cout << &zahl(iostream.h)Adressoperator, gibt Adresse von Zahl raus statt deren Wert

sizeof(xxx)(iostream.h)Gibt die Grösse von xxx an (kann eine Variable, Pointer,...sein)

char*Zeiger,double*Zeiger(iostream.h)Pointer, zeigt auf eine Variable, einen char,... . Nimmt 2 Bytes

cout << int (*text)(iostream.h)Inhalts- oder Indirection-Operator: mit Hilfe des Pointers auf

den Wert der Variable zugreifen, deren Adresse man hat.

while(*text) ¿{... text++)(iostream.h)Solange du auf einen Buchstaben stössts, ...

hilf=werte->xk;(iostream.h)Struktur-Operator, Übergabe von Pointern auf Strukturen

int xyz;¿int & neuer=xzy;(iostream.h)Referenzvariable, neuer hat die selbe Speicheradresse wie xyz

void funktion () const(iostream.h)Funktion ist read-only, kann keine Daten ändern und auch

nichts aufrufen was dies könnte

void Kl::fk(){cout << this;}(iostream.h)Pointer auf Klasseninstanz(gibt 0x85955ec8 oder sowas aus)

Klassen

class xx{private:public:...};(iostream.h)Form einer Klasse

double funkt(void){return y;}(iostream.h)Schnittstellenfunktion, im Private-Bereich einer Klasse

void tem::sp(void)(iostream.h)(Ausserhalb der Klasse)Die Funktion sp gehört zur Klasse tem

temperatur temp1;(iostream.h)(in main). Instanz, per temp1 kann man auf die Werte der

Klasse temperatur zugreifen

private:¿static int wert;(iostream.h)Es gibt nur eine Version von wert, egal wie viele Objekte erzeugt 

werden (alle Objekte können gemeinsam auf wert zugreifen)

public:¿tex(char*s)...¿~tex();(iostream.h)Destruktor, hat selben Namen wie Klasse

tex::~tex(){cout<<"tot";}Bei Destruktion einer Instanz von tex wird "tot" ausgegeben

int statisch::wert=0;(iostream.h)(ausserhalb der Klasse:) statische Werte werden extra initialisiert 

delete text;(iostream.h)etwas löschen um diesen Speicherplatz wieder freizumachen

friend int freund(kla1,kla2)(iostream.h)Deklaration der friend-Funktion freund, welche Zugrif auf private

Daten der Klassen kla1 und kla2 hat(Deklar.in kla1 und kla2)

doublefreund(kla1 x,kla2 y)(iostream.h)(ausserhalb der Klassen:) Friend-Funktion freund.kla1 und kla2

{return x.k1+y.k2;}sind die Namen der Klassen, k1 und k2 die private-Zahlen

public: friend class zwei;(iostream.h)Klasse deklariert Kla. zwei als freund(gibt ihr Zugrif auf private)

Abl::Abl(int a, float b):Bas(a)Konstruktor der Basisklasse Bas benötigt einen Parameter; dies muss

man beim Konstruktor der abgeleiteten Klasse angeben.

Vererbung

class schueler:public mensch(iostream.h)schueler erbt alles von der Klasse mensch (Zugang auf alles)

class sch:public k1,k2,...(iostream.h)sch erbt alles von k1, k2, ...

protected:¿ float sachwert;(iostream.h)auch abgeleitete Klassen können sachwert benutzen + verändern

Rechnen

a*=-1, a/=2, a+=1, a-=1(iostream.h)Multipliziere a mit -1, dividiere a durch 2, addiere, …

a++, a--(iostream.h)Addiere 1 zu a, substrahiere 1 von a

b=a++, b=++a(iostream.h)1) b wird a, und dann erhöht (a bleibt), 2) zuerst wird a erhöht

<, >, <=>=, ==, !=(iostream.h)grösser/kleiner oder gleich, gleich, verschieden

c=a%b(iostream.h)c erhält den Rest von a/b(kann nicht mit float benutzt werden)

sin, cos, tan, sqrt,...(math..h)diverse mathematische Funktionen

exp (log (8.5) * 2)(math.h)8,5 hoch 2 rechnen (Exposant)

abs(-20)fabs(-20), labs(20)(math.h,stdlib.h)Die Valeur Absolue, von int/float/long

pow (10,2)(math.h)Errechne 10 hoch 2

0x1A9F /015237hexadezimale Zahl (beginnt mit 0x) /oktale (beginnt mit 0)

Zahlen

bool:t/f, char:127, int:32767, long:2,14Mrd, float:3.4e38, double:1.7e308,long double:3.4e4932

Diese Werte sind signed und gehen vom Minus-in den Plusbereich. Unsigned... sind nur positiv und gehen daher doppelt so weit ins +

cout.precision(x);(iostream.h)Angabe der Präzision wie eine Zahl ausgegebenwird (Stellen

vor dem Komma zählen auch)

cout.precision(int(log10(Zahl(math.h)Bewirkt dass keine Nachkommastellen angezeigt werden

)+1));(“Zahl” ist die Zahl die abgeschnitten angezeigt werden soll)

const long PI=3.1(float,...)(iostream.h)Festlegen von Konstanten

2.7F(iostream.h)2.7 wird als float deklariert (statt standardmässig double)

Zahl=atof/atoi/atol (wort)(stdlib, stdio, math)Zahl erhält den Zahlenwert den (falls)das Wort enthält, als float,

int, resp. long, Enthält Wort Buchstaben wird abgebrochen

Präprozessor-Direktiven

#include”my_h.h”Datei wird zuerst im aktuellen Verzeichnis gesucht (und nicht

im vordefinierten wie bei < >)

#defineWERT 12 Festlegen von unveränderbaren Variablen

oder const Wert=12

#if A==1...#elif ...#elif Ifs (die Präprozessor-Direktiven stehen vor main und haben

...#else ...#endifkein ;)

#ifdef XXX ¿#...Untersucht ob XXX existiert (nicht welchen Wert er hat!)

Divers

randomize ();(stdlib, stdio, time)aktiviert den Zufallsgenerator

srand(getpid());(stdlib, process)aktiviert einen besseren Zufallsgenerator

time_t t;(time.h, stdlib.h,Zufallsgenerator wird mit neuen zufälligen Zahlen initialisiert

srand((unsigned)time(&t));process.h)(sehr nützlich!)

b=rand()%100; (stdlib, stdio, time)b erhält einen Wert zwischen 0 inclus und 100 exclus (int)

exit (0);(process.h)Programm verlassen(beenden), gibt den Wert in Klammern mit

time_t jetzt=time(NULL);

while (time(NULL)<jetzt+10);(time.h, dos.h)Eine Pause von 10 Sekunden(10 Sek. Schleife die nichts tut)

delay (25);(time.h)Eine Pause von 25 ms.

void ton (f,z){(time.h, dos.h)Mit dem Aufruf ton(100,1000) erzeugt man einen Ton von

sound(f);delay(z);nosound();}Frequenz 100 Hz und Dauer 1000 ms.(f=frequenz, z=zeit)

system(”picem /v:l xyz.pcx”);(stdlib.h, stdio.h)Ein anderes Programm aufrufen, nachher wird zum C++-

Programm zurückgekehrt