C++ - Einführung in die objektorientierte Programmierung · C++ - Objektorientierte Programmierung...

Post on 04-Jun-2018

220 views 4 download

Transcript of C++ - Einführung in die objektorientierte Programmierung · C++ - Objektorientierte Programmierung...

Leibniz Universität IT Services | Anja Aue

C++

Einführung in die objektorientierte Programmierung

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 2

Handbücher des IT Services

C++ für C-Programmierer C und C++ für Java-Programmierer

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 3

Bücher

Bjarne Stroustrup: Programming. Principles and Practice Using C++. Addision Wesley. 2. Auflage.

Jürgen Wolf: Grundkurs C++: C++-Programmierung verständlich erklärt. Rheinwerk Computing. 3. Auflage.

Dieter Bär: Schrödinger programmiert C++: Jetzt mit C++ 14 und Syntax-Highlighting. Rheinwerk Computing. 2. Auflage.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 4

PDF-Dokumente im Netz

TU Braunschweig: https://www.tu-braunschweig.de/Medien-DB/statik/software/einfuehrung_in_cpp.pdf

Universität Graz: http://www.uni-graz.at/~haasegu/Lectures/Kurs-C/Script/html/script_programmieren.pdf

DHBW Stuttgart: http://wwwlehre.dhbw-stuttgart.de/~kfg/cpp/cpp.pdf

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 5

Referenzen im Web

http://www.stroustrup.com/C++.html http://www.cplusplus.com/doc/tutorial/ http://www.cprogramming.com/tutorial.html http://www.learncpp.com/ http://www.etp.physik.uni-

muenchen.de/kurs/Computing/ckurs/cxx.html http://www.cpp-tutor.de/cpp/hinweise.html

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 6

C++- Standard und Standardbiblothek

http://www.open-std.org/jtc1/sc22/wg21/ http://gcc.gnu.org/onlinedocs/libstdc++/ http://www.cplusplus.com/reference/clibrary/ http://en.cppreference.com/w/ https://www.sgi.com/tech/stl/ https://de.wikibooks.org/wiki/C%2B%2B-Programmierung/

_Die_STL

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 7

Entwicklungsumgebungen (IDE)

NetBeans (http://www.netbeans.org/) Code::Blocks (http://www.codeblocks.org/) Borland Turbo C++ (http://www.turboexplorer.com/cpp) KDevelop (http://www.kdevelop.org/) Microsoft Visual Studio (https://www.visualstudio.com/)

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 8

NetBeans ...

1996 entwickelt von Studenten aus der Tschechischen Republik.

1999 Übernahme durch Sun Microsystems. 2010 Übernahme durch Oracle.

Die Programmiersprachen Java, C / C++, PHP und JavaScript werden unterstützt.

Download unter https://netbeans.org/.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 9

Installation von NetBeans für C++

Installation des Compilers MinGW und der Tools msys. Umgebungsvariablen für den Compiler setzen. Installation von NetBeans. Installation des Plugins für C/C++. Siehe https://netbeans.org/community/releases/80/cpp-setup-

instructions.html oder https://wiki.fbihome.de/Netbeans.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 10

Start von NetBeans

Klick auf das Icon auf dem Desktop. Start – Alle Programme – NetBeans – NetBeans IDE.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 11

Startseite

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 12

Optionen für C++

Tools / Options. Die Kategorie C/C++ wird angezeigt. Die verschiedenen Registerkarten in der Kategorie bilden die

Einstellungsmöglichkeiten ab.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 13

Möglichkeiten

Die Registerkarte Build Tools listet den Pfad zum Compiler, Debugger etc. auf. Es werden alle Pfade zu Tools, die für die Erstellung eines ausführbaren Programms benötigt werden, eingestellt.

Die Registerkarte Project Options zeigt Regeln zur Erstellung von Objektcode mit Hilfe von make an.

Registerkarte Code Assistence. Siehe https://netbeans.org/kb/docs/cnd/HowTos.html

Registerkarte Debugging Options. Registerkarte Other legt die Dateiendungen in Abhängigkeit

des Dateityps fest.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 14

Build Tools

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 15

Code Assistance

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 16

C++ - Projekt anlegen

File – New Project. Auswahl des Ordners C/C++ in der Liste Categories. In Abhängigkeit des gewählten Elements aus der Liste Projects

werden die weiteren Schritte angezeigt. In dem Kurs wird der Eintrag C/C++-Application genutzt.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 17

Hinweis

Falls das C++-Projekt auf ein Netzlaufwerk unter Windows angelegt wird, werden automatisch zwei Startpunkte „main“ erzeugt.

Die Kompilierung des Programms bricht mit dem Fehler „multiple definition of `main'“ ab.

Nach dem Löschen einer der beiden Dateien „main“ kommt die Meldung „... does not exist or is not executable“.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 18

Projects - C/C++ Application

Siehe https://netbeans.org/kb/docs/cnd/quickstart.html

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 19

Zeile „Project Name“

Projekte bündeln Dateien für ein lauffähiges C++-Programm. Der Name ist der Wurzelordner für alle, zu einem Projekt

gehörenden, Dateien im Ordner NetBeansProjects. Standardmäßig wird der Name CppApplication_ und eine

fortlaufende Nummer genutzt. Der Name sollte nur die Groß- und Kleinbuchstaben a…z, die

Zahlen 0...9 und den Unterstrich enthalten. Die Wörter im Projektnamen beginnen mit einem Großbuchstaben.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 20

Zeile „Project Location“

Mit Hilfe der Schaltfläche Browse... kann der Speicherort des Projektes in der Zeile Project Location verändert werden.

Die Zeile Project Folder setzt sich aus dem Projektnamen und dem gewählten Speicherort zusammen.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 21

Zeile „Create Main File“

Für ein C++-Programm wird der Einstiegspunkt in das Projekt automatisiert erstellt.

Mit Hilfe des „Main Files“ wird jedes C++-Programm gestartet.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 22

Zeile „Tool Collection“

Der Compiler für das C++-Programm wird ausgewählt. Der Compiler übersetzt den lesbaren Programmtext in

Maschinencode. Fehler in der Syntax führen zu einem Abbruch.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 23

Compiler für C++

C++ Compiler des GNU-Projekts. Unterstützung für C++11 und C++14. Aktuelle Version GCC 5.3. Download unter http://gcc.gnu.org/.

Minimalist GNU for Windows (MinGW). Download unter http://www.mingw.org/.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 24

Windows 7: Umgebungsvariablen

Klick im Startmenü auf System. Oder: Suche im Windows Explorer nach Systemsteuerung.

Klick auf das Icon System und Sicherheit. System / Erweiterte Systemeinstellungen. Klick auf die Schaltfläche Umgebungsvariablen.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 25

Windows 8: Umgebungsvariablen

Suche nach System (Systemsteuerung). Klick auf den Link Erweiterte Systemeinstellungen. Klick auf die Schaltfläche Umgebungsvariablen.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 26

Umgebungsvariablen für den Compiler setzen

Auswahl der Variablen PATH. Klick auf die Schaltfläche Bearbeiten. Die verschiedenen

Pfadangaben werden durch ein Semikolon getrennt. Hinzufügung von „C:\MinGW\bin“. Mit welchen Tool wird das

Programm kompiliert? Hinzufügung „C:\MinGW\msys\1.0\bin“. Mit welchen Tools wird

das lauffähige Programm erstellt?

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 27

Geöffnetes Projekt

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 28

Aufbau der IDE

In der Titelleiste wird der Name des Projekts angezeigt. Menüleiste. Symbolleiste für die wichtigsten Befehle. Mit Hilfe von View –

Toolbar können Symbolleisten ein- oder ausgeblendet werden. Fenster, die den Code anzeigen oder die Struktur des Projekts

abbilden.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 29

Fenster in der IDE

Mit Hilfe von Drag & Drop kann ein Fenstern unterhalb der Symbolleiste an jeder Position abgelegt werden.

Mit Hilfe der Schaltfläche in der rechten oberen Ecke wird ein Fenster minimiert.

Jedes Fenster besitzt mindestens eine Registerkarte. Fenster können als Registerkarten in anderen Fenstern abgelegt werden.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 30

Registerkarten in einem Fenster

Am oberen Rand der Registerkarte wird der Name und die Schließen-Schaltfläche angezeigt.

Der Name gibt Auskunft über die Funktion der Registerkarte. Registerkarten kategorisieren die verschiedenen Informationen.

Mit Hilfe von Drag & Drop kann eine Registerkarte von einem Fenster in ein anderes Fenster verschoben werden.

Mit Hilfe des Menüs Window können die verschiedenen Registerkarten geöffnet werden.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 31

„Ordner“ öffnen oder schließen

Klick auf das Pluszeichen: Ein Ordner wird geöffnet. Der Inhalt wird angezeigt.

Klick auf das Minuszeichen: Ein Ordner wird geschlossen.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 32

Projekt-Explorer: Anzeige der Projektstruktur

Die Registerkarte Projects zeigt die Struktur der Projekte an.

Im Ordner Source Files befindet sich der Programmcode. In diesem Ordner werden die Quelldateien (*.cpp) abgelegt.

Im Ordner Header Files befinden sich die Deklarationsdateien. In diesem Ordner werden die Header-Dateien (*.h) abgelegt.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 33

Projekt-Explorer: Anzeige der Ordnerstruktur

Die Registerkarte Files zeigt die Ordnerstruktur des Projekts an.

Im Wurzelverzeichnis wird die Datei „main.cpp“ zum Starten des Programms angezeigt.

Im Ordner build befinden sich die Objektdateien (*.o).

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 34

Fenster „Classes“

Die Registerkarte Classes zeigt die verschiedenen Klassen in einem Projekt an.

Der Ordner Libraries zeigt die Header-Dateien der eingebundenen Bibliotheken an.

Für jede benutzerdefinierte Klasse in dem geöffneten Projekt wird ein Ordner angezeigt.

Globale Konstanten und Funktionen in dem geöffneten Projekt werden aufgelistet.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 35

Attribute einer Klasse

Attribute beschreiben eine Klasse. Private Attribute werden durch das

Schloss in der linken oberen Ecke eines blauen Quadrats gekennzeichnet.

Geschützte Attribute werden durch den Schlüssel in der linken oberen Ecke eines gelben Quadrates gekennzeichnet.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 36

Konstruktoren und Destruktoren einer Klasse

Konstruktoren und Destruktoren sind spezielle Funktionen einer Klasse

Konstruktoren, die zur Erzeugung eines Objekts benötigt werden, sind mit einem gelben Viereck gekennzeichnet.

Destruktoren, die bei der Zerstörung eines Objektes aufgerufen werden, sind durch ein blaues Viereck gekennzeichnet.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 37

Methoden einer Klasse

Methoden sind Funktionen, die die Attribute einer Klasse verändern oder lesen.

Methoden werden mit Hilfe des roten Kreises gekennzeichnet.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 38

Hinzufügung einer Klasse zu einem Projekt

Rechter Mausklick auf den Projektnamen im Projekt-Explorer. New – C++-Class.

Oder: File – New File. Auswahl der Kategorie C++ und den Dateityp C++-Class.

In beiden Fällen wird automatisch für die Klasse eine Header-Datei mit der Endung „.h“ und eine Codedatei mit der Endung „.cpp“ angelegt.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 39

Codefenster

Abbildung der Struktur eines C++-Programms. Mit Hilfe von Registerkarten werden die verschiedenen

Dateien eines Projektes angezeigt.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 40

Darstellung von Code

Schlüsselwörter in C++ werden standardmäßig mit blauer Schrift gekennzeichnet.

Kommentare werden in grauer Schrift dargestellt. Benutzerdefinierte Bezeichner werden mit schwarzer Schrift

gekennzeichnet. Tools – Options; Kategorie Fonts & Color legt die

verschiedenen Schriftarten für die verschiedenen Elemente im Code fest.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 41

Registerkarte öffnen

Durch ein Doppelklick auf eine Datei im Projekt-Explorer. Durch ein Doppelklick auf ein Element im Fenster Classes. Durch ein Doppelklick auf ein Element im Fenster Navigator.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 42

Registerkarte aktivieren oder schließen

Aktivierung: Klick auf den Kopf der Registerkarte. Schließen: Klick auf das Kreuz in der rechten oberen Ecke

einer Registerkarte,

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 43

Navigator

Struktur des angezeigten Codes. In der Titelleiste wird der Namen der Methode oder Funktion

angezeigt, in dem sich der Mauszeiger aktuell befindet.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 44

Abbild der Struktur des Codes

Die roten Kreise kennzeichnen Methoden einer Klasse oder Funktionen in der prozeduralen Programmierung.

Gelbe Rauten kennzeichnen Methoden zur Initialisierung einer Klasse.

Blaue Rauten kennzeichnen Methoden, die bei der Zerstörung einer Klasse aufgerufen werden.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 45

Projekt schließen

File – Close Project (ProjectName).

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 46

Eigenschaften eines Projekts

File – Project Properties Rechtsklick auf den Projektnamen. Properties im Kontextmenü.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 47

Kategorie „General“

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 48

Kategorie General; Encoding

Einstellung des Zeichensatzes für das Codefenster. In welchen Zeichensatz wird der Code gespeichert? Um Fehler zu vermeiden, sollte dort UTF-8 eingestellt sein.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 49

C++

ISO-genormte Programmiersprache. Objektorientierte und generische Programmierung. Komplexe, flexible Programmiersprache. Hardware-nahe Programmierung.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 50

Geschichte

Ca. 1979 arbeitet Bjarne Stroustrup an einer Programmiersprache unter dem Namen „C mit Klassen“.

1983 ändert sich der Name der Programmiersprache in C++. 1985 wird die erste Referenz zu der Programmiersprache von

Bjarne Stroustrup veröffentlicht. 1990 wird Borland's Tubo C++ -Compiler als erste

kommerzielles Produkt für die Programmiersprache angeboten.

1998 Veröffentlichung des ersten Standards als ISO/IEC 14882:1998 (C++98).

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 51

Standard

C++98. ISO/IEC 14882:1998. Publiziert im Jahr 1998. Erste Standardisierung der Programmiersprache. Ergänzung der Norm im Jahr 2003.

C++11. ISO/IEC 14882:2011. Publiziert im April 2011. Ersetzung der alten Versionen.

C++14. ISO/IEC 14882:2014. Publiziert im Januar 2015. Erweiterungen und Ergänzungen zu C++11.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 52

… in den Eigenschaften eines Projekts in NetBeans

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 53

… einstellen

Rechter Mausklick auf den Namen des Projekts im Projekt-Explorer.

Klick auf das Menü Properties. Auswahl der Kategorie Build – C++ Compiler. Die Attribute in der Kategorie Basic Options werden auf der

rechten Seite des Dialogfensters angezeigt. Die Eigenschaft C++ Standard hat den Wert <default>.

Standardmäßig wird der Standard C++98 genutzt.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 54

Einstellungen für die Version C++11

Die Attribute in der Kategorie Basic Options werden auf der rechten Seite des Dialogfensters angezeigt. Durch einen Klick auf den Pfeil am rechten Rand der Eigenschaft C ++ Standard‑ wird die Liste aller Möglichkeiten geöffnet. Aus der Liste wird das Element C++11 ausgewählt.

Die Attribute in der Kategorie Compilation Line werden auf der rechten Seite des Dialogfensters angezeigt. Die Eigenschaft Additional Options hat den Wert -std=c++11.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 55

Einsatzmöglichkeiten

Treiber für Hardware. Programmierung für eingebettete Systeme. Entwicklung von Systemprogrammen. Zeitkritische Spiele. Eine Liste von Beispielen finden Sie unter

http://www.stroustrup.com/applications.html.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 56

Programmierkonzepte in C++

Prozedurale Programmierung. Modulare Programmierung. Objektorientierte Programmierung. Generische Programmierung.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 57

Prozedurale Programmierung

Top-down Entwurf. Welche Aufgabe soll abgebildet werden? Wie kann die Aufgabe in kleine Teilaufgaben gegliedert

werden? Strukturierter Code, aber keine strukturierten Daten. Das Programmierkonzept wird von den Programmiersprachen

C und C++ unterstützt.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 58

Anweisungen

Anweisungen sind die kleinste Einheit in einem C++-Programm.

Eine Anweisung beschreibt eine Aktion mit Hilfe von Operatoren, Operanden und Schlüsselwörtern aus C++.

{ class clsWuerfel myWuerfel; myWuerfel.setKantenlaenge(4.5); cout << "Kantenlaenge: " << myWuerfel.getKantenlaenge();}

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 59

... in C++

Jede Anweisung in C++ endet mit einem Semikolon. Eine Anweisung kann leer sein.

{ class clsWuerfel myWuerfel; myWuerfel.setKantenlaenge(4.5); cout << "Kantenlaenge: " << myWuerfel.getKantenlaenge();}

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 60

Funktionen

Zusammenfassung von Aktionen. Zerlegung einer Aufgabe in verschiedene Teilaufgaben. Schnittstelle nach außen.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 61

Aufbau

int main(){ return 0;}

Jede Funktion hat einen Kopf und einen Rumpf.

Der Funktionskopf beschreibt eine Schnittstelle nach außen. Der Funktionskopf legt fest, welche Parameter der Funktion übergeben werden. Der Typ des Rückgabewertes einer Funktion wird definiert.

Der Funktionsrumpf wird durch die geschweiften Klammern begrenzt. Mit Hilfe der geschweiften Klammern wird ein Block von Anweisungen zusammengefasst.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 62

Modulare Programmierung

Aufteilung von Quellcode in verschiedene Dateien. Quellcode zu einem Thema wird in einer Datei zusammengefasst.

Auslagerung von Deklarationen etc. in eine Header-Datei. Die Deklaration und Implementierung von Funktionen werden getrennt.

Module sind in sich abgeschlossen. Jedes Modul kann allein getestet und ausgeführt werden.

Das Programmierkonzept wird von den Programmiersprachen C und C++ unterstützt.

C++ | 06.05.15 Seite 63

Namensraum

Definition eines Bereiches, in dem Variablen, Funktionen und Methoden sichtbar sind.

Um Namenskonflikte zu vermeiden, werden Quelldateien in Pakete verpackt.

Alle Standardkomponenten der Programmiersprache C++ liegen in dem Namensraum std. std ist der Standard-Namensraum für Objekte, die in den Standardbibliotheken definiert sind.

C++ | 06.05.15 Seite 64

using-Anweisung

using namespace std;

Durch die Anweisung werden alle Namen in dem angegebenen Raum sichtbar.

Der Zugriff auf den angegebenen Namensraum wird für alle Funktionen erlaubt.

using-Anweisungen sollten nicht in Header-Dateien verwendet werden.

C++ | 06.05.15 Seite 65

using-Deklaration

using std::cout;

Aus dem Namensraum std wird nur der Name cout sichtbar. Alle Funktionen können nur auf das angegebene Objekt in dem

Namensraum zugreifen. Die using-Deklaration kann sich am Anfang eines Moduls oder

direkt in einem Funktionsrumpf befinden.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 66

Quelldateien kompilieren

Quelltext ([datei].cpp)

Präprozessor

Compiler

Objektdatei ([datei].o)

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 67

Präprozessor und Compiler

Der Präprozessor ersetzt die, mit einem Hash-Zeichen gekennzeichneten Zeilen durch den entsprechenden Text.

Der Compiler übersetzt den lesbaren Programmtext in Maschinencode. Fehler in der Syntax führen zu einem Abbruch.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 68

Präprozessor-Anweisungen im Code

Jede Präprozessor-Anweisung beginnt immer mit dem Hash (#).

Die Anweisung endet automatisch mit dem Ende der Zeile. Präprozessor-Anweisung werden an den Anfang einer

Quelldatei oder Header-Datei gesetzt.

#include <iostream>#include "clsWuerfel.h"

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 69

Header-Datei einbinden

Quelltext (main.cpp)

Präprozessor

Compiler

Objektdatei (main.o)

user-defined ([datei].h)

system-defined (header.h)

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 70

Header-Dateien (*.h)

Inhaltsverzeichnis zu einer Quelltextdatei. Alle notwendigen Deklarationen für die Implementierung. Definition von Prototypen für eine Klasse. Definition von Prototypen von Funktionen. Instruktionen für den Compiler. Quellcode, der in mehreren Dateien eingebunden werden kann. Schnittstelle nach außen.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 71

Beispiel einer Header-Datei#ifndef CLSWUERFEL_H#define CLSWUERFEL_H

class clsWuerfel {

public: clsWuerfel(); clsWuerfel(int); clsWuerfel(const clsWuerfel& );

~clsWuerfel();

void setKantenlaenge(double);

double getKantenlaenge();

double getWuerfelVolumen();

Be

isp

iele

/cp

pO

OP

_0

01

_..

.

private: double kantenlaenge; };

#endif /* CLSWUERFEL_H */

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 72

Einbinden von Header-Dateien

Mit Hilfe des Befehls #include werden die verschiedenen Header-Dateien eingebunden.

Header-Dateien, die durch die spitzen Klammern begrenzt werden, sind in der Standardbibliothek definiert.

Header-Dateien, in Anführungszeichen, sind benutzerdefinierte Deklarationsdateien.

#include <iostream>#include "clsWuerfel.h"

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 73

Symbolische Konstanten in einer Header-Datei

Mit Hilfe von #define wird eine symbolische Konstante deklariert.

Der Präprozessor ersetzt die Bezeichnung der symbolischen Konstanten im Code durch den entsprechenden Wert.

Eine symbolische Konstante kann einen definierten Wert haben, muss aber nicht. In diesem Beispiel hat die Konstante keinen definierten Wert.

#define CLSWUERFEL_H

#define name

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 74

Ist die symbolische Konstante definiert?

#ifndef CLSWUERFEL_H#define CLSWUERFEL_H

#endif /* CLSWUERFEL_H */

Mit Hilfe von #ifndef (if not defined) kann abgefragt werden, ob die symbolische Konstante definiert ist oder nicht.

Der Anweisungsblock endet mit #endif. Durch diese Präprozessor-Anweisung wird eine

Mehrfacheinbindung einer Header-Datei verhindert.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 75

Ausführbares Programm erzeugen

Objektdatei (main.o)

Linker

Ausführbare Datei (main.exe)

Objektdatei ([datei].o)

Standard Runtime Library

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 76

Linker

Bindet alle zu einem Programm gehörenden Objektdatei zu einer ausführbaren Datei zusammen.

Falls die einzubindenden Dateien nicht vorhanden sind, wird eine Fehlermeldung ausgegeben.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 77

Startpunkt eines modularen C++-Programms

#include <iostream>#include "clsWuerfel.h"

using namespace std;

int main() { class clsWuerfel myWuerfel;

class clsWuerfel koerper(5); myWuerfel.setKantenlaenge(4.5); cout << "Kantenlaenge meines Würfels: " << myWuerfel.getKantenlaenge();

return 0;}B

eis

pie

le/c

pp

OO

P_

00

1_

...

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 78

main()

Bereitstellung einer Steuerzentrale für das Projekt. Jedes ausführbare Programm in der Programmiersprache

C+ + beginnt mit dieser Funktion.‑ Aufruf von Klassen und Funktionen aus Header-Dateien. main ist der Name der Startprozedur. C++-Programme sind

case-sensitiv. Das heißt, eine Funktion Main wird nicht für den Start genutzt.

Die main-Datei ist nur einmal in einem C++-Projekt vorhanden.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 79

Aufbau

Präprozessor-Anweisung

int main ()

}

Anweisung;

Anweisung;

return 0;

using - Anweisung;

{

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 80

Objektorientierte Programmierung

Bottom-up Design. Welche Daten werden zur Beschreibung eines Objektes aus

der realen Welt benötigt? Objekte werden in Abhängigkeit der gestellten Aufgabe abstrahiert.

Welche Methoden werden zur Modifizierung eines Objektes benötigt? Die Attribute (die Eigenschaften) eines Objekts werden mit Hilfe von Methoden verändert und gelesen.

Das Programmierkonzept wird von der Programmiersprache C++ unterstützt.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 81

Objekte

Variablen von einem bestimmten Typ „Klasse“. Mit Hilfe eines Bauplans wird ein konkretes Objekt erstellt. Dem Objektnamen folgen keine runden Klammern. Das Objekt

nutzt den Standard-Bauplan. Dem Objektnamen folgen runde Klammern. In den runden

Klammern befindet sich eine Parameterliste. Der vorhandene Bauplan wird entsprechend der Anfangswerte angepasst.

class clsWuerfel myWuerfel;

class clsWuerfel koerper(5);

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 82

„Standard-Objekt“

Dem Objektnamen folgen keine runden Klammern. Das Objekt nutzt den Standard-Bauplan.

class clsWuerfel myWuerfel;

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 83

Übergabe von Parametern

Dem Objektnamen folgen runde Klammern. Die runden Klammern begrenzen eine Parameterliste. Die

einzelnen Parameter in der Liste werden durch Kommata getrennt.

Der vorhandene Bauplan wird entsprechend der Anfangswerte angepasst.

class clsWuerfel koerper(5);

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 84

Objekt „Würfel“

Die Kantenlänge beträgt 2 cm. Der Würfel ist grün.

Für das Objekt kann die Kantenlänge und die Farbe gelesen und modifiziert werden.

Das Volumen des Objekts kann berechnet werden.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 85

Objekt

Substantive in einem Text. Ein Ding (Exemplar, Instanz) aus der realen Welt. Virtuelle Dinge wie zum Beispiel Dialoge auf dem Monitor. Baukasten von Funktionen.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 86

Beispiel „Objekt“

Postalische Adresse

Schloßwender Str.5

30159Hannover

Person

HerrTom

Meier

Wohnt „Schloßwender Str 5“; „30159 Hannover“

Zieht um in den „Welfengarten 6“,„30167 Hannover“

Ändert den Namen in „Meier-Müller“

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 87

Prinzipien der objektorientierten Programmierung

Abstraktion Datenkapselung Polymorphismus Vererbung

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 88

Abstraktion

Die allgemein gültigen Attribute werden dargestellt. Es werden nur die Attribute definiert, die für die

Programmieraufgabe benötigt werden. In Abhängigkeit der Nutzung der Attribute werden Methoden

implementiert.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 89

Klasse „Würfel“

Attribute: kantenlaenge. Die Attribute beschreiben ein konkretes Objekt. Die Eigenschaften sind für alle Objekte dieses Typs gültig.

Methoden zum Lesen und Modifizieren der Attribute: setKantenlaenge, getKantenlaenge.

Methoden, um den Bau zu beginnen: clsWuerfel.

Methoden, um den Bau zu zerstören: ~clsWuerfel.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 90

Klasse

Abstraktion von einen Ding. Zusammenfassung von Variablen und Funktionen in einem

Datentyp. Bauplan für ein bestimmtes Objekt. Oberbegriff / Kategorie von Dingen. Zum Beispiel ein Würfel

kann gelb, rot oder grün sein. Die Kantenlänge kann unterschiedlich sein. Aber alle Ausprägungen beschreiben einen „Würfel“.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 91

Beispiel „Klasse“

Postalische Adresse

StraßeHausnummerPostleitzahl

Ort

Person

AnredeVorname

Nachname

Wohnt an der Adresse

Zieht um

ändert

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 92

„Klasse“ und „Objekt“

Postalische Adresse

StraßeHausnummerPostleitzahl

Ort

Person

AnredeVorname

Nachname

wohnt ...

zieht um

ändert

Postalische Adresse

Schloßwender Str.5

30159Hannover

Person

HerrTom

Meier

wohnt „Schloßwender Str 5“; „30159 Hannover“

zieht um in den „Welfengarten 6“,„30167 Hannover“

ändert den Namen in „Meier-Müller“

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 93

Aufbau einer Klasse

class clsWuerfel {

public: clsWuerfel(); clsWuerfel(int); clsWuerfel(const clsWuerfel& ); ~clsWuerfel();

void setKantenlaenge(double); double getKantenlaenge(); double getWuerfelVolumen();

private: double kantenlaenge; };

Be

isp

iele

/cp

pO

OP

_0

01

_..

.

class clsWuerfel {

}

public:Konstruktor();Destruktoren();Methoden();

private:attribut;

attribut;

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 94

Beschreibung mit Hilfe von UML

Unified Modelling Language zur Darstellung von Klassen etc.

Der Name der Klasse steht am oberen Rand.

Dem Namen folgen die Attribute der Klasse. Auf die Attribute kann von außen nicht zu gegriffen werden (-; private ).

Am Ende werden die Methoden aufgelistet. Die Methoden dürfen von außen aufgerufen werden (+; public).

Wuerfel

- kantenlaenge: double

+getKantenlaenge() : double+setKantenlaenge(double) : void+getVolumen() : double

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 95

… in einer Header-Datei

class clsWuerfel {

};

Beispiele/cppOOP_001_...

Beginn mit dem Schlüsselwort class. Dem Schlüsselwort folgt der Name der Klasse. Der Name ist

eindeutig. Attribute und Methoden werden innerhalb der geschweiften

Klammern deklariert. Jede Deklaration einer Klasse endet mit einem Semikolon.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 96

Attribute (Member)

Allgemein gültige Beschreibung eines Objekts. In diesem Beispiel wird der Würfel mit Hilfe der Kantenlänge und der Füllfarbe beschrieben.

Eigenschaften eines Objekts. In diesem Beispiel: Farbe und Kantenlänge.

Beschreibung des Zustandes eines Objekts. Wenn ein Würfel gedreht wird, wird das Attribut „IstGedreht“ gesetzt.

Attribute beschreiben die variablen Werte eines Objektes.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 97

… in einer Header-Datei

class clsWuerfel {

public:

private: double kantenlaenge;};

Be

isp

iele

/cp

pO

OP

_0

01

_..

.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 98

Methoden

Erstellung von Objekten. Lesen und verändern von Attributen eines Objektes. In diesem

Beispiel wird die Kantenlänge und die Füllfarbe mit Hilfe von Methoden gesetzt und gelesen.

Änderung eines Zustandes eines Objekts. Funktionen innerhalb einer Klasse. Objekte und Methoden werden mit Hilfe des Punktoperators

verbunden.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 99

… in einer Header-Datei

class clsWuerfel {

public: clsWuerfel(); clsWuerfel(int); clsWuerfel(const clsWuerfel& ); ~clsWuerfel();

void setKantenlaenge(double); double getKantenlaenge(); double getWuerfelVolumen();

private:

};Be

isp

iele

/cp

pO

OP

_0

01

_..

.

class clsWuerfel {

}

public:Konstruktor();Destruktoren();Methoden();

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 100

Konstruktoren, Destruktoren und Methoden

Konstruktoren werden bei der Erzeugung eines konkreten Objekts von einer Klasse genutzt.

Destruktoren werden bei der Zerstörung eines Objektes aufgerufen.

Methoden lesen und verändern Attribute im Leben eines Objekts.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 101

… in einer Quelldatei

#include "clsWuerfel.h"

clsWuerfel::clsWuerfel() { kantenlaenge = 1;}

clsWuerfel::clsWuerfel(int kantenlaenge){ this->kantenlaenge = kantenlaenge;}

void clsWuerfel::setKantenlaenge(double laenge){ kantenlaenge = laenge;}

Be

isp

iele

/cp

pO

OP

_0

01

_..

.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 102

Datenkapselung

Methoden (Funktionen) und Attribute (Eigenschaften) werden gemeinsam in einer Klasse gekapselt.

Die Klasse stellt alle Funktionen, die zur Bedienung oder Erzeugung von Objekten benötigt werden, nach außen hin zur Verfügung.

Eigenschaften von Objekten können aber nicht von außen manipuliert werden. Das Innenleben der Objekte ist in einer Blackbox versteckt.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 103

Blackbox

class clsWuerfel {

public: clsWuerfel(); clsWuerfel(int); clsWuerfel(const clsWuerfel& ); ~clsWuerfel();

void setKantenlaenge(double); double getKantenlaenge(); double getWuerfelVolumen();

private: double kantenlaenge; };

Be

isp

iele

/cp

pO

OP

_0

01

_..

.

Mit Hilfe der Eingabe von private: werden die Attribute in der Klasse gekapselt. Die Attribute sind nicht sichtbar.

Methoden sind public:. Methoden beschreiben eine Schnittstelle nach außen mit Hilfe ihres Kopfes. Der Anwender weiß, aber nicht wie die Methode Attribute verändert oder liest.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 104

Vererbung

Darstellung von Beziehungen zwischen zwei Klassen. Darstellung von Eltern-Kind-Beziehungen. Beispiel: Ein Würfel erbt Attribute und Methoden von dem

Objekt „Rechteck“.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 105

Polymorphismus

Verschiedene Implementierungen von Methoden. Überschreiben von geerbten Methoden. Überladen von vorhandenen Methoden. „Kinder“ können Methoden der „Eltern“ überschreiben. Die

überschriebene Methode der Eltern kann aber trotzdem von den Kindern genutzt werden.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 106

Generische Programmierung

Nutzung von Schablonen zur Beschreibung eines Objekts. Schreiben von Methoden unabhängig vom Typ des Objektes. Nutzung von Templates. Das Programmierkonzept wird von der Programmiersprache

C++ unterstützt.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 107

Konsole in NetBeans

Fenster Output meist am unteren rechten Rand der IDE. Standardeingabe (cin) und Standardausgabe (cout) für ein C++-

Programm Window - Output oder <STRG>+<4> minimiert oder maximiert

die Konsole.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 108

Konsolen-Typ in NetBeans auswählen

Rechter Mausklick auf das C++-Projekt. Properties im Kontextmenü. Kategorie Run. Console Type sollte den Eintrag Standard Output haben.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 109

Starten des C++-Programms

Mit Hilfe des grünen Pfeils am linken Rand wird das, in der Titelleiste benannte Programm gestartet.

C++ - Objektorientierte Programmierung g | 06.05.15 Seite 110

C++-Programm stoppen

Mit Hilfe des roten Rechtecks am linken Rand wird das, in der Titelleiste benannte laufende Programm angehalten.

Das Programm wird nicht vollständig durchlaufen, sondern vom Entwickler vorzeitig abgebrochen.