Ein- und Ausgabe mit Strömen
C++ erweitert C. Dateien enden auf .cpp und werden mit g++ übersetzt:
#include <iostream> int main() { int stunden; std::cout << "Wie viele Stunden? "; std::cin >> stunden; std::cout << stunden * 60 << " Minuten" << std::endl; return 0; }
$ g++ zeit.cpp -o zeit $ ./zeit Wie viele Stunden? 3 180 Minuten
- #include <iostream>:Bibliothek für Ein- und Ausgabe in C++ (ohne
.h). - std::cout <<:schickt Werte in den Ausgabestrom; mehrere
<<hängen aneinander. - std::endl:beendet die Zeile, wie
\n. - std::cin >>:liest einen Wert in eine Variable — ohne
&und ohne%d. - using namespace std;:danach genügt
coutstattstd::cout. In Header-Dateien meiden: Jede Datei, die den Header einbindet, bekäme allestd-Namen aufgezwungen — Namenskonflikte drohen. - g++:
g++ datei.cpp -o prog— wiegcc, bindet aber die C++-Bibliothek mit ein. - C in C++:Fast jedes C-Programm lässt sich auch mit
g++übersetzen —printffunktioniert weiter.
string, bool und Referenzen
Drei Werkzeuge ersetzen umständliche C-Konstruktionen:
#include <iostream> #include <string> using namespace std; int main() { string wort = "Mikro"; wort = wort + "controller"; // verketten mit + cout << wort << " hat " << wort.length() << " Zeichen" << endl; bool gleich = (wort == "Mikrocontroller"); // Vergleich mit == cout << "gleich: " << gleich << endl; // true wird als 1 ausgegeben return 0; }
Mikrocontroller hat 15 Zeichen gleich: 1
- string:
std::stringist eine Zeichenkette, die ihre Länge selbst verwaltet (#include <string>). - Verketten:
+hängt Zeichenketten aneinander. - Länge:
wort.length()— eine Methode wie in Java. - Vergleichen:
==vergleicht den Inhalt (in C nötig:strcmp). - bool:Typ mit
trueundfalse;coutgibt sie als 1 und 0 aus. In C gibt esbool(vor C23) nur mit<stdbool.h>.
#include <iostream> using namespace std; void bonus(int &punkte) { // Referenzparameter: kein Kopieren punkte = punkte + 10; } int main() { int stand = 5; int &r = stand; // r ist ein zweiter Name für stand r = 20; // ändert stand bonus(stand); // Aufruf ohne & cout << "stand = " << stand << endl; return 0; }
stand = 30
- Referenz:
int &r = stand;—rist ein zweiter Name für dieselbe Variable und muss sofort gebunden werden. - Referenzparameter:
void bonus(int &punkte)ändert die Variable des Aufrufers — wie ein Zeiger, aber ohne*und ohne&beim Aufruf. - Tauschen:
void tausche(int &a, int &b)gelingt so ganz ohne Zeiger — vergleiche im Applet.
Dasselbe Programm in C und C++: Klicke eine Zeile an (oder Tab und Pfeiltasten, ←/→ springt zur anderen Sprache). Ihr Gegenstück leuchtet auf, darunter steht die Erklärung. ▶ führt durch alle Unterschiede, Unterschiede überlagern legt beide Programme übereinander.
geändertnur in C++gleich
Halte fest: C++ übernimmt fast alles aus C — Gerüst, Variablen, return. Neu sind vor allem Ströme (cout/cin), der Typ string und Referenzen: Sie ersparen Formatangaben, feste Array-Größen und Zeiger-Sternchen. Beide Programme liefern dieselbe Ausgabe.
C++ ergänzt: cout << / cin >> statt printf/scanf, string statt char-Array, bool für Wahrheitswerte, Referenz int &r statt Zeiger. Übersetzen: g++ datei.cpp -o prog.
Allgemeine Hinweise
g++ statt gcc
gcc zeit.cpp scheitert beim Linker: undefined reference to `std::cout'. C++-Dateien immer mit g++ übersetzen.
Referenz sofort binden
int &r; allein ist ein Fehler: 'r' declared as reference but not initialized.
cin liest nur ein Wort
Gibt man Ada Lovelace ein, landet in einem string nur Ada. Die ganze Zeile liest getline(cin, s);.
