MINT lernen

Was C++ ergänzt

Was, wenn printf-Platzhalter, strcpy und Zeiger-Sternchen plötzlich überflüssig werden?

1

Ein- und Ausgabe mit Strömen

C++ erweitert C. Dateien enden auf .cpp und werden mit g++ übersetzt:

C++ · zeit.cpp
#include <iostream>

int main() {
    int stunden;
    std::cout << "Wie viele Stunden? ";
    std::cin >> stunden;
    std::cout << stunden * 60 << " Minuten" << std::endl;
    return 0;
}
Konsole
$ 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 cout statt std::cout. In Header-Dateien meiden: Jede Datei, die den Header einbindet, bekäme alle std-Namen aufgezwungen — Namenskonflikte drohen.
  • g++:g++ datei.cpp -o prog — wie gcc, bindet aber die C++-Bibliothek mit ein.
  • C in C++:Fast jedes C-Programm lässt sich auch mit g++ übersetzen — printf funktioniert weiter.
2

string, bool und Referenzen

Drei Werkzeuge ersetzen umständliche C-Konstruktionen:

C++ · wort.cpp
#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;
}
Konsole
Mikrocontroller hat 15 Zeichen
gleich: 1
  • string:std::string ist 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 true und false; cout gibt sie als 1 und 0 aus. In C gibt es bool (vor C23) nur mit <stdbool.h>.
C++ · bonus.cpp
#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;
}
Konsole
stand = 30
  • Referenz:int &r = stand; — r ist 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.

C neben C++

geändertnur in C++gleich

Konsole · C
Konsole · C++

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.

Merke

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.

3

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);.

Videos