Was ist C++?
Die Programmiersprache C++ ist weit verbreitet, wird vielfältig genutzt und zählt schon lange zu den wichtigsten Sprachen. Sie ist
ursprünglich als Weiterentwicklung zu der Sprache C entstanden. Aufgrund der Verwandtschaft zu C ist es auch in C++ möglich, hardware-orientierte
schnelle Programme zu entwickeln.
C++ ermöglicht es, rein objektorientiert zu programmieren, also mit Klassen, Objekten, Eigenschaften und Methoden. Als Vorbereitung dazu ist es
empfehlenswert, mit C++ zunächst klassisch prozedural zu starten, also mit Datentypen, Operatoren, Kontrollstrukturen und Funktionen. Auf diese
Weise erhält man eine solide Grundlage, die anschließend den Einstieg in die Objektorientierung erleichtert.
Die Versionen von C++
C++ wurde im Jahre 1979 von Bjarne Stroustrup entwickelt. Über die Jahre hinweg hat die Sprache viele Neuerungen erfahren. Im Jahre 1998
erschien die standardisierte Version C++98. Weitere Verbesserungen sind mit den Standards C++03, C++11 und C++14 in den Jahren 2003, 2011
und 2014 eingeflossen. Im März 2017 wurde die Entwicklung der Version C++17 abgeschlossen. Die Version C++20 ist bereits in Arbeit.
Sie sollten mit einer Entwicklungsumgebung (=IDE = Integrated Development Environment) arbeiten, die den Standard C++11 berücksichtigt. Die
notwendigen Einstellungen können Sie bei der Installation der IDEs beziehungsweise bei der Entwicklung von C++-Projekten mithilfe der IDEs
vornehmen. Als Beispiele für IDEs seien erwähnt: Eclipse, NetBeans, Xcode und Orwell Dev C++. Wichtige Gründe für den Einsatz von C++11
sind:
- Die aktuell verfügbaren C++-Compiler setzen zwar meist vollständig die Standards bis einschließlich C++11 um, aber nicht immer alle Bestandteile der nachfolgenden Versionen.
- Die Standards bis einschließlich C++11 enthalten im Gegensatz zu den nachfolgenden Versionen sehr viele Neuerungen, die auch für den Einsteiger interessant sind.
Falls Sie weitere Informationen zur Sprache C++ und der Zuordnung ihrer Elemente zu den verschiedenen Versionen benötigen, empfehle ich die C++-Referenz unter der
Adresse http://cppreference.com.
Benutzeroberflächen mit der Qt-Bibliothek
Es gibt zahlreiche Bibliotheken, die die bereits umfangreichen Möglichkeiten von C++ noch erweitern. Für die Entwicklung von
Programmen mit Benutzeroberflächen, sogenannte GUIs (GUI = Graphical User Interface) und für den Zugriff auf Datenbanken können
Sie die weitverbreitete, betriebssystemunabhängige Qt-Bibliothek und die zugehörige IDE Qt-Creator verwenden. Seit der Version 5.7
von Juni 2016 baut Qt vollständig auf C++11 auf. Qt arbeitet primär mit C++ zusammen, kann aber auch mit anderen Programmiersprachen
genutzt werden.
In Qt wird mit der ereignisgesteuerten Programmierung gearbeitet. Auf den Benutzeroberflächen befinden sich Steuerelemente, sogenannte
Widgets, mit deren Hilfe der Benutzer das Programm bedient. Die Bedienung eines Widgets, zum Beispiel der Klick auf eine Schaltfläche
oder die Auswahl eines Listeneintrags, ist ein Ereignis. Dabei wird ein Signal gesendet. Ein Signal kann mit einem Slot verbunden sein.
Dabei handelt es sich um eine Funktion, deren Code aufgrund des Ereignisses durchlaufen wird.
Neben den Klassen für die GUI-Entwicklung bietet die Qt-Bibliothek auch viele nützliche Klassen, die die Möglichkeiten von C++
allgemein erweitern, wie zum Beispiel QString für Zeichenketten, QDate für Datumsangaben oder QTime für Uhrzeitangaben.
Container und Iteratoren
Bei der Entwicklung von Anwendungen müssen häufig große Datenmengen gespeichert werden. Dazu sind verschiedene Datenstrukturen
in unterschiedlicher Form geeignet. Sie besitzen jeweils bestimmte Vorteile (und Nachteile) zur Organisation der Daten. Die Container-
Bibliothek von C++ beinhaltet eine Vielzahl von Klassentemplates und Methoden. Ein Klassentemplate ist eine Vorlage, die auf
unterschiedliche Datentypen angewendet werden kann. Die verschiedenen Container ermöglichen die programmiertechnische Umsetzung von
verschiedenen Datenstrukturen.
Ein Container verwaltet den Speicherplatz für seine Elemente und bietet Methoden für den Zugriff auf diese Elemente. Sie können auf die
Elemente direkt zugreifen oder mithilfe von Iteratoren. Das sind intelligente Zeiger, die für den Durchlauf von Containern geeignet sind.
Die Auswahl des passenden Containers hängt unter anderem von der Problemstellung, den gewünschten Möglichkeiten des Zugriffs auf die Daten
und der zu erwartenden Datenmenge ab. Die Datenbelastung, also die Menge der zu erwartenden Daten pro Zeiteinheit, stellt ebenfalls einen
wichtigen Faktor dar.
Ein vector-Feld
Zur Speicherung einer variablen, also veränderlichen Menge mehrerer Werte desselben Datentyps eignet sich das Klassentemplate vector.
Damit legt man ein intelligentes dynamisches Feld an, auch genannt: vector-Feld. In Abbildung 1 werden ein vector-Feld von ganzzahligen
Werten des Datentyps int, der zugehörige Iterator und einige Methoden verdeutlicht.
Abbildung 1: Ein vector-Feld und der zugehörige Iterator
Im nachfolgenden Programm "container_vector.cpp" werden einige typische Operationen und Methoden mit vector-Feldern erläutert.
Ausgabe des gesamten vector-Felds
void ausgeben(vector<int> &x)
{
// Iterator für vector-Felder
vector<int>::iterator position;
// Schleife von der Beginnposition bis vor die Endposition
for(position = x.begin(); position != x.end(); position++)
// Ausgabe eines ELements
cout << *position << " ";
cout << endl;
}
int main()
{
// Erzeugung des vector-Felds
vector<int> v;
vector<int>::iterator position;
// Festlegen der Größe
v.resize(3);
// Füllen mit Werten
for(unsigned int i=0; i<v.size(); i++)
v.at(i) = 10 * (i+1);
cout << "at(): ";
// Ausgabe
ausgeben(v);
// Anhängen von Elementen am Ende
for(int i=0; i<3; i++)
v.push_back(4 * (i+1));
cout << "push_back(): ";
ausgeben(v);
// Entfernen von Elementen am Ende
v.pop_back();
cout << "pop_back(): ";
ausgeben(v);
// Einfügen von Elementen mitten im Feld
cout << "insert(): ";
position = v.begin() + 1;
// Prüfen der Position
if(position >= v.begin() && position < v.end())
{
v.insert(position, 77);
ausgeben(v);
}
else
cout << "Position nicht im vector-Feld" << endl;
// Löschen von Elementen mitten im Feld
cout << "erase(): ";
position = v.end() - 2;
// Prüfen der Position
if(position >= v.begin() && position < v.end())
{
v.erase(position);
ausgeben(v);
}
else
cout << "Position nicht im vector-Feld" << endl;
// Löschen aller Elemente
v.clear();
cout << "clear():";
ausgeben(v);
// Initialisieren mit neuen Werten
v = {19, 18, 17};
cout << "Neue Werte: ";
ausgeben(v);
}
Es folgt die Ausgabe des Programms:
at(): 10 20 30
push_back(): 10 20 30 4 8 12
pop_back(): 10 20 30 4 8
insert(): 10 77 20 30 4 8
erase(): 10 77 20 30 8
clear():
Neue Werte: 19 18 17
Aktuelle IT Jobs
» IT-Administrator (m/w/d)» Wirtschaftsinformatiker*in als Stv. Teamleitung Vertriebs-IT (m/w/d) Schwerpunkt: Mobile Ticketing» Informatiker (m/w/d) als Software Engineer (m/w/d) Shop Floor Automation» IT-Systemadministrator (m/w/d)» Softwareingenieur/Experte Level 2 (m/w/d) im Bereich Digitalisierung (Dekarbonisierung)» alle Jobs anzeigen