C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++...

98
Rechenzentrum C++ als Erweiterung von C Simone Knief – Rechenzentrum der CAU

Transcript of C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++...

Page 1: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Simone Knief – Rechenzentrum der CAU

Page 2: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Überblick

• Einführung• Ojektorientierte Konstrukte• Unterschiede zwischen C und C++• Strukturen in C++• Member-Funktionen

2

• Member-Funktionen • Objekte und Klassen • Vererbung

Page 3: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Geschichte von C++

• ab 1980 entwickelt von Bjarne Stroustrup unter dem Namen "C mit Klassen"• 1983 wird die neu entwickelte Sprache in C++ umbenannt• 1985 erster kommerzieller Compiler wird entwickelt• 1998 Standard der Sprache C++ wird von der ISO (International Organization

for Standardization) genormt• 2003: Überarbeitung und Erweiterung von C++

3

• 2003: Überarbeitung und Erweiterung von C++

Page 4: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Eigenschaften von C++

• Weiterentwicklung von ANSI-C• enthält die Funktionalität von C mit Erweiterungen für die objektorientierte

Programmierung • unterstützt prozedurale und objektorientierte Programmierung • ermöglicht die Entwicklung und Wartung von sehr großen Programmpaketen mit

mehr als 10.000 Codezeilen

4

mehr als 10.000 Codezeilen

Page 5: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Prozedurale Programmierung

• C gehört in die Kategorie der prozeduralen Programmierung • ein praktisch sequentieller Programmablauf• Programm wird in kleine Teilaufgaben zerlegt• Teilprogramme werden als Funktionen oder Prozeduren bezeichnet• einzelne Programmteile sind wieder verwendbar

5

Page 6: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Objektorientierte Programmierung

• wird mit OOP abgekürzt• nutzt Objekte, die über bestimmte Eigenschaften und Funktionen verfügen • Eigenschaften und Funktionen eines Objektes bilden eine eigenständige Einheit• Objekt:

– unabhängiger und wieder verwendbarer Codeabschnitt– führt eine spezifische Aufgabe aus– speichert festgelegte Daten

6

– speichert festgelegte Daten• Klassen fassen Objekte mit den gleichen Eigenschaften zusammen• objektorientiertes Programmieren erfordert objektorientiertes Denken

Page 7: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Objektorientierte Konstrukte

• 4 Säulen der objektorientierten Programmierung • Objekte werden durch folgende Hauptmerkmale definiert

– Polymorphismus– Kapselung– Vererbung– Wiederverwendbarkeit

7

Page 8: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Polymorphismus

• Vielgestaltigkeit• Programm kann sich automatisch anpassen • macht den Code wieder verwendbarer • Überladen von Funktionen

– Programm enthält mehrere Funktionen mit dem gleichen Namen – Beispiel: Kreis zeichnen:

• 3 Punkte auf Umfang angeben

8

• 3 Punkte auf Umfang angeben• Mittelpunkt und Radius angeben• Mittelpunkt und 1 Punkt auf Umfang angeben

– Beispiel: Quadrat zeichnen• x- und y-Wert eines Punktes und die Breite wird angegeben• x- und y-Wert von 2 Punkten wird angegeben

– in C nicht korrekt– In C++ erlaubt– Programm bestimmt beim Aufruf welche Funktion verwendet wird

• Überladung von Operatoren möglich

Page 9: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Kapselung

• es lassen sich in sich abgeschlossene Objekte erzeugen • Verschiedene Objekte sind unabhängig voneinander• Kapselung von Funktionalität und Daten• Objekte können leichter wieder verwendet werden • realisiert die Funktionalität einer Black-Box• Anwender muss nicht wissen wie eine Berechnung durchgeführt wird

9

• Anwender muss nicht wissen wie eine Berechnung durchgeführt wird• Kenntnis von Ein- und Ausgabeinformation reicht aus

Page 10: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Vererbung

• Erzeugung neuer Objekte, die die Eigenschaft vorhandener Objekte erweitern • Ein Objekt übernimmt alle Datenkomponenten eines bereits definierten

Objektes und erweitert oder modifiziert diese

• Beispiel: Quadratobjekt – x- und y-Koordinaten einer Punktes

10

– x- und y-Koordinaten einer Punktes– Länge der Seite– Zeichen mit dem das Quadrat gezeichnet werden soll– Funktion, die die Fläche eines Quadrates berechnet

� per Vererbung kann Quadratobjekt zu einem Würfelobjekt erweitert werden

Page 11: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Objektorientierter Code (Beispiel)

// C++-Programm mit den Klassen quadrat und wuerfel#include <iostream.h>

// Einfache quadrat-Klasse---> Kapselungclass quadrat {public:quadrat();quadrat(int);int laenge;

// Konstruktor für quadrat ---> Polymorphismus quadrat::quadrat(){laenge = 4;}

11

int laenge;long raum();int zeichnen();};

// Einfache wuerfel-Klasse, die von quadrat erbt --> Vererbung

class wuerfel: public quadrat {public:wuerfel( int );long raum();};•

// Überladener Konstruktor für quadratquadrat::quadrat( int init_laenge ){laenge = init_laenge;}

Page 12: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Programmiersprache C++

• Welche Änderungen und Erweiterungen gibt es gegenüber ANSI-C ? • Wie gebe ich Informationen auf dem Bildschirm aus ? • Wie lese ich Daten von der Tastatur ein ? • Wie arbeite ich mit überladenen Funktionen ? • Wie übergebe ich Standardwerte als Funktionsparameter ? • Was sind Inline-Funktionen ?

12

• Was sind Inline-Funktionen ?

Page 13: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Änderungen gegenüber ANSI-C

• Kommentare können auf 2 Arten gekennzeichnet werden • unterschiedliche Platzierung von Variablendeklarationen• unterschiedliche Prinzipien der Ein-und Ausgabe von Informationen • Funktionsdeklaration ohne Angabe eines Rückgabewertes• Funktionen kann eine variable Anzahl von Parametern übergeben werden • Funktionen können überladen werden

13

• Funktionen können überladen werden • Inline-Funktionen

Page 14: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Kommentare in C und C++

• Kommentare in C/* Kommentartext */

14

Page 15: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Kommentare in C und C++

• Kommentare in C/* Kommentartext */

• Kommentare in C++– /* Kommentartext*/

15

– einzeilige Kommentare mit einen // kennzeichnen– alles ab // bis zum Zeilenende ist ein Kommentar– Beispiele:

int i; // Laufzeitvariablefloat summe; // Summe der Schleife

Page 16: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Ein- und Ausgabe in C++

/* Ausgabe in einem C-Programm */#include <stdio.h>int main (){

printf("Viel Spass \n");return 0;

16

return 0; }

Page 17: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Ausgabe in C++

/* einfaches C-Programm */#include <stdio.h>int main (){printf("Viel Spass \n");

/* einfaches C++-Programm */#include <iostream>using namespace std; int main(){

17

printf("Viel Spass \n");return 0;

}

{cout << "Viel Spass \n";

return 0;}

Page 18: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

C++-Programme übersetzen

C-Programme übersetzen• Code hat die Endung .c• Programmübersetzung:

– gcc –o bsp.exe bsp.c• Programmaufruf

18

• Programmaufruf– ./bsp.exe

Page 19: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

C++-Programme übersetzen

C-Programme übersetzen• Code hat die Endung .c• Programmübersetzung:

– gcc –o bsp.exe bsp.c• Programmaufruf

C++-Programme übersetzen• Code hat die Endung .cpp• Programmübersetzung:

– g++ -o bsp.exe bsp.cpp• Programmaufruf

19

• Programmaufruf– ./bsp.exe

• Programmaufruf– ./bsp.exe

Page 20: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Ausgabe von Variablen

/* Variablen in C ausgeben */#include <stdio.h>int main()int x=100, y=50, summe=0;{summe=x+y;

20

summe=x+y;printf("Summe von %d und %d ist %d \n", x,y,summe);return 0;

}

Page 21: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Ausgabe von Variablen in C++

/* Variablen in C++ ausgeben */#include <iostream>using namespace std;int main(){int x=100, y=50, summe=0;

21

int x=100, y=50, summe=0;summe=x+y;cout << "summe von " << x << " und " << y << " ist" << summe <<"\n";

return 0; }

Page 22: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Ausgabe von Variablen in C++

/* Variablen in C++ ausgeben */#include <iostream>using namespace std;int main(){int x=100, y=50, summe=0;summe=x+y;

• Programmübersetzung:– g++ -o cout2.exe cout2.cpp

• Programmausführung:– ./cout2.cpp

22

summe=x+y;cout << "summe von " << x << " und " <<

y << " ist" << summe <<"\n";return 0; }

• Programmausgabe:summe von 100 und 50 ist 150

Page 23: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Ausgaben von Variablen in C++

// cout mit unterschiedlichen Datentypen verwenden#include <iostream>using namespace std; int main(){

int an_int = 123;float a_float = 123.456;

23

float a_float = 123.456;char a_char = 'A';char a_string[] = "Ein String";bool a_boolean = true;

cout << "\n";cout << "Ein int: " << an_int << “\n”;cout << "Ein float: " << a_float << “\n”;cout << "Ein char: " << a_char << “\n”;cout << "Ein string: " << a_string << “\n”;cout << "Ein bool: " << a_boolean << “\n”;

return 0;}

Page 24: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Ausgaben von Variablen in C++

#include <iostream>using namespace std;int main(){int an_int = 123;float a_float = 123.456;char a_char = 'A';char a_string[] = "Ein String";

• Programmübersetzung: – g++ -o cout3.exe cout3.cpp

• Programmausführung: – ./cout3.exe

• Programmausgabe:

24

char a_string[] = "Ein String";bool a_boolean = true;

cout << "\n";cout << "Ein int: " << an_int <<

“\n”;cout << "Ein float: " << a_float <<

“\n”;cout << "Ein char: " << a_char <<

“\n”;cout << "Ein string: " << a_string <<

“\n”;cout << "Ein bool: " << a_boolean <<

“\n”;return 0;

}

• Programmausgabe: Ein int: 123Ein float: 123.456Ein char: AEin string: Ein StringEin bool: 1

Page 25: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Einlesen von Daten in C

/* Einlesen von Daten in C */include <stdio.h>int main(){int x,y; printf("Bitte geben Sie 2 Zahlen ein \n“);

25

printf("Bitte geben Sie 2 Zahlen ein \n“);scanf("%d %d",&x,&y);return 0;}

Page 26: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Einlesen von Daten in C++

/* Einlesen von Daten in C++ */#include <iostream>using namespace std; int main(){int x,y; cout << "Bitte geben Sie 2 Zahlen ein \n";

26

int x,y; cout << "Bitte geben Sie 2 Zahlen ein \n";cin >> x >> y;cout << "Sie haben die Zahlen " << x <<" und " << y <<" eingegeben \n";return 0;}

Page 27: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Einlesen von Daten in C++

/* Einlesen von Daten in C++ */#include <iostream>using namespace std; int main(){

• Program,mübersetzung:– g++ -o cin.exe cout2.cpp

• Programmausführung: – ./cin.exe

• Programmausgabe:

27

{int x,y; cout << "Bitte geben Sie 2 Zahlen ein \n");cin >> x >> y;cout << "Sie haben die Zahlen " << x <<"

und " << y <<" eingegeben \n";return 0;}

• Programmausgabe:Bitte geben Sie 2 Zahlen ein3 5Sie haben die Zahlen 3 und 5 eingegeben

Page 28: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Zusammenfassung: Ein- und Ausgabe in C++

• (objektorientierte) Streambibliothek #include <iostream>using namespace std;

• Ausgabe von Informationen– Textausgabe

28

– Textausgabecout << "Hallo \n";

– Variablenausgabecout << " X hat den Wert " << x <<"\n";

• Einlesen von Informationen: cin >> xwert >> ywert;

Page 29: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Datentypen in C++

• C++ kennt auch alle Datentypen von C • 2 zusätzliche Datentypen

– Datentyp bool• boolsche Zahl• belegt nur 1 Byte• Wert ist entweder wahr oder falsch

29

• Wert ist entweder wahr oder falsch– Datentyp class

• Daten können in einer Klasse verpackt werden • Klassen definieren Objekte in C++

Page 30: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Variablendeklaration in C

• Variablen müssen zu Beginn eines Block deklariert werden • werden meistens am Anfang einer Funktion deklariert

• Beispiel#include <stdio.h>int count=0;

30

int count=0;int main(){for (count=0;count <10; count++)

printf("count ist %d \n",count);return 0;}

Page 31: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Variablendeklaration in C

• Variablen müssen zu Beginn eines Block deklariert werden • werden meistens am Anfang einer Funktion deklariert

• Beispiel#include <stdio.h>int main(){

31

{for (int count=0;count <10; count++)

printf("count ist %d \n",count);return 0;}

Page 32: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Variablendeklaration in C

• Variablen müssen zu Beginn eines Block deklariert werden • werden meistens am Anfang einer Funktion deklariert

• Beispiel#include <stdio.h>int main(){

32

{for (int count=0;count <10; count++)

printf("count ist %d \n",count);return 0;}

� in C nicht möglich

Page 33: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Variablendeklaration in C++

• Variablen können zu jeder Zeit deklariert werden • müssen weiterhin vor der ersten Verwendung deklariert werden

• Beispiel#include <iostream.h>int main(){

33

{for (int count=0;count <10; count++)

cout << "count ist " << count << "\n" ;return 0;}

Page 34: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Variablendeklaration in C++

• Variablen können zu jeder Zeit deklariert werden • müssen weiterhin vor der ersten Verwendung deklariert werden • Möglichkeit sollte nur sparsam verwendet werden• Code wird schnell sehr unübersichtlich• geeignet für Schleifenvariablen

34

Page 35: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strings in C++

• C++ kennt keinen Datentyp für Strings• es gibt eine Klasse string, in deren Variablen man Strings abspeichern kann • zusätzliche Header-Datei erforderlich

#include <string>using namespace std:

• String deklarieren:

35

• String deklarieren: string vorname;

• String initialisieren: vorname="Peter";

Page 36: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strings in C++: Beispiel

#include <iostream>#include <string>using namespace std; int main(){

36

{string vorname="Peter"; string nachname="Müller";cout << "Name: " << vorname << nachname ;return 0;

}

Page 37: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strings aneinanderhängen

#include <iostream>#include <string>using namespace std;int main(){

string vorname="Peter";string nachname="Lustig";

37

string nachname="Lustig";

string ausgabe, ausgabe2;ausgabe=vorname+nachname; ausgabe2=vorname+ " "+ nachname; cout << ausgabe << "\n";cout << ausgabe2 << "\n";

return 0; }

Page 38: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strings aneinanderhängen

#include <iostream>#include <string>using namespace std:int main(){string vorname="Peter";

Programmausgabe: PeterLustigPeter Lustig

38

string vorname="Peter";string nachname="Lustig"string ausgabe,ausgabe2;;ausgabe=vorname+nachname; ausgabe2=vorname+ " "+nachname;cout << ausgabe << "\n";cout << ausgabe2<< "\n";return 0; }

Page 39: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strings ersetzen

• Methode replace ersetzt Teile in einem String

#include <iostream>#include<string>using namespace std;int main(){

39

{string ausgabe="Hallo Hans, wie geht es Dir?";string name="Helga"; cout<< ausgabe << "\n";ausgabe.replace(6,4,name);cout <<ausgabe <<"\n";

return 0; }

Page 40: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strings ersetzen

#include <iostream>#include<string>using namespace std;int main(){string ausgabe="Hallo Hans, wie geht es

• Programmausgabe: Hallo Hans, wie geht es Dir? Hallo Helga, wie geht es Dir ?

40

string ausgabe="Hallo Hans, wie geht es Dir?";

string name="Helga"; cout<< ausgabe << "\n";ausgabe.replace(6,4,name);cout <<ausgabe <<"\n";return 0; }

Page 41: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strings einfügen

• Methode insert fügt Teile in einen String ein

#include <iostream>#include<string>using namespace std;int main(){

41

{string ausgabe="Hallo Klaus, wie geht es ?";string name=" und Helga "; cout<< ausgabe << "\n";ausgabe.insert(11, name);cout <<ausgabe <<"\n";

return 0; }

Page 42: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strings einfügen

#include <iostream>#include<string>using namespace std;int main(){string ausgabe="Hallo Klaus, wie geht

• Programmausgabe: Hallo Klaus, wie geht es? Hallo Klaus und Helga, wie geht es?

42

string ausgabe="Hallo Klaus, wie geht es?";

string name=" und Helga "; cout<< ausgabe << "\n";ausgabe.insert(10, name);cout <<ausgabe <<"\n";return 0; }

Page 43: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strings löschen

• Methode erase löscht Teile in einen String

#include <iostream>#include<string>using namespace std;int main(){

43

{string ausgabe="Hallo Klaus, wie geht es Dir?";cout<< ausgabe << "\n";ausgabe.erase(5, 6);cout <<ausgabe <<"\n";

return 0; }

Page 44: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strings löschen

#include <iostream>#include<string>using namespace std;int main(){string ausgabe="Hallo Klaus, wie geht es

Dir?";

• Programmausgabe: Hallo Klaus, wie geht es Dir? Hallo, wie geht es Dir?

44

Dir?";cout<< ausgabe << "\n";ausgabe.erase(5, 6);cout <<ausgabe <<"\n";

return 0; }

Page 45: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

C++: Zeilenweise einlesen

• shift-Operator >> liest nur bis zum nächsten Whitespace-Zeichen ein

• getline()– Funktion zum Einlesen einer ganzen Zeile– allgemeine Struktur:

• getline (cin,stringname);

45

• getline (cin,stringname);• Bsp.: getline (cin, name);

Page 46: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Funktionen in C++

• Funktionen überladen • Standardwerte für Funktionsparameter• Inline-Funktionen

46

Page 47: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Funktionen überladen

• einfachste Form des Polymorphismus• ein Funktionsname kann mehrmals definiert werden • Programme werden anpassungsfähiger• Benutzer kann Funktion auf unterschiedliche Arten aufrufen• Programm trifft die richtige Zuordnung anhand der Signatur der Funktion• Signatur:

47

• Signatur: – Kombination aus Funktionsnamen mit Reihenfolge und Typen der Parameter– Rückgabewert gehört nicht zur Signatur

• Funktionsaufrufe müssen sich in einem der beiden Punkte unterscheiden– Anzahl der Parameter– Datentypen der Parameter

• in C: Funktion wird nur anhand Ihres Namens identifiziert

Page 48: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Funktionen überladen

• Beispiel: Quadratfläche berechnen– angegeben wird der x- und y-Wert von einem Punkt und die Seitenlänge– angegeben werden die x- und y-Werte von zwei Punkten

• mögliche Funktionsheader:

48

• mögliche Funktionsheader: – int quadrat (int xwert, int ywert, int laenge);– int quadrat(int xwert, int ywert, int xwert2, int ywert2);

• mögliche Funktionsaufrufe– fläche=quadrat(xwert, ywert,laenge);– fläche=quadrat(xwert1,ywert1, xwert2, ywert2)

Page 49: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Funktion überladen (Parameteranzahl)

#include <iostream>using namespace std; int produkt (int xwert);int produkt (int xwert, int ywert);int main(){

int xwert=3, ywert=5, ergebnis1=0,

int produkt (int xwert){

int tmp1=0; tmp1=xwert*xwert;return (tmp1);

}

49

int xwert=3, ywert=5, ergebnis1=0, ergebnis2=0;

ergebnis1=produkt(xwert);ergebnis2=produkt(xwert,ywert);cout << "produkt aus 1 Wert ist " << ergebnis1

<< "\n";cout << produkt aus 2 Werten ist " <<

ergebnis2 << "\n";

return 0; }

int produkt (int xwert, int ywert){

int tmp2=0;tmp2=xwert*ywert;return (tmp2);

}

Page 50: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Funktion überladen (Parameteranzahl )

#include <iostream>using namespace std;int produkt (int xwert);int produkt (int xwert, int ywert);int main(){

int xwert=3, ywert=5, ergebnis1=0, ergebnis2=0;ergebnis1=produkt(xwert);

• Programm übersetzen– g++ -o produkt.exe produkt.cpp

• Programm ausführen:– ./produkt.exe

50

ergebnis1=produkt(xwert);ergebnis2=produkt(xwert,ywert);cout << "produkt aus 1 Wert ist " << ergebnis1 << "\n");cout << produkt aus 2 Werten ist " << ergebnis2 << "\n";

return 0; }int produkt (int xwert)

{….}

int produkt (int xwert, int ywert){….}

• Programmausgabe:Produkt aus 1 Wert ist 9Produkt aus 2 Werten ist 15

Page 51: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Funktionen überladen (Datentypen)

#include <iostream>using namespace std; int division (int xwert, int ywert);float division (float awert, float bwert);int main (){

int division (int xwert, int ywert){

int tmp1=0;tmp1=xwert/ywert;return(tmp1);

}

51

{int div1=0,xwert=5, ywert=3;float div2=0,awert=10.0,bwert=4.0;div1=division(xwert,ywert);div2=division(awert,bwert);cout << "Division von " << xwert <<" und "

<<ywert << "ist " << div1 <<"\n";cout << "Division von " << awert << " und

" << bwert << "ist" << div2 << "\n";return 0;}

}float division (float awert, float bwert){

float tmp2=0.0;tmp2=awert/bwert;return (tmp2);

}

Page 52: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Funktionen überladen (Datentypen)

#include <iostream>using namespace std;int division (int xwert, int ywert);float division (float awert, float bwert);int main (){int div1=0,xwert=5, ywert=3;float div2=0,awert=10.0,bwert=4.0;div1=division(xwert,ywert);

• Programm übersetzen:– g++ -o div.exe divison.cpp

• Programm ausführen: – ./div.exe

52

div1=division(xwert,ywert);div2=division(awert,bwert);cout << "Division von " << xwert <<" und " <<ywert << "ist " <<

div1 <<"\n";cout << "Division von " << awert << " und " << bwert << "ist" <<

div2 << "\n";return 0;}int division (int xwert, int ywert){….}float division (float awert, float bwert){…}

• Programmausgabe:Division von 5 und 3 ist 1Division von 10.0 und 4.0 ist 2.5

Page 53: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Standardwerte als Funktionsparameter

• in der Parameterliste wird ein Standardübergabewert angegeben• sinnvoll, wenn ein Parameter oft den gleichen Wert annimmt• Funktion passt sich an, wenn ein Parameter im Aufruf nicht enthalten ist• default-Wert wird nur im Funktionsprototypen angegeben

53

Page 54: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Standardwerte für Parameter (Beispiel 1)

/* Preisangabe in Euro oder DM */#include <iostream>using namespace std;void Preisangabe (float preis, char waehrung[]="Euro");int main (){Preisangabe(9.99);

54

Preisangabe(9.99);Preisangabe(19.56,"DM");return 0;}void Preisangabe (float preis, char waehrung[]){

cout << "Der Preis betraegt " << preis << waehrung << "\n";return ;

}

Page 55: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Funktionen überladen (Datentypen)

/* Preisangabe in Euro oder DM */#include <iostream>using namespace std;void Preisangabe (float preis, char

waehrung[]="Euro");int main (){Preisangabe(9.99);

• Programm übersetzen:– g++ -o preis.exe preis.cpp

• Programm ausführen: – ./preis.exe

55

Preisangabe(9.99);Preisangabe(19.56,"DM");return 0;}void Preisangabe (float preis, char

waehrung[]){

cout << "Der Preis betraegt " << preis << waehrung << "\n";return ;

}

• Programmausgabe:Der Preis beträgt 9.99EuroDer Preis beträgt 19.56DM

Page 56: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Standardwerte als Parameter (Beispiel 2)

#include <iostream>using namespace std;void rechteck (int breite=3,int

laenge=3,char zeichen = 'X');int main(){

void rechteck ( int breite, int laenge, char zeichen )

{int ctr1 = 0;int ctr2 = 0;for (ctr1 = 0; ctr1 < laenge; ctr1++ )

56

{cout << "\nRechteck( 8, 2, \'A\' );\n";rechteck( 8, 2, '*' );cout << "\nRechteck( 4, 5 );\n";rechteck( 4, 5 );cout << "\nRechteck( 2 );\n";rechteck( 2 );cout << "\nRechteck( );\n";rechteck( );return 0;

}

for (ctr1 = 0; ctr1 < laenge; ctr1++ ){cout << "\n";for ( ctr2 = 0; ctr2 < breite; ctr2++){cout << zeichen;

}}cout << "\n";

}

Page 57: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Standardwerte als Funktionen: Beispiel 2

• Rechteck (8,2,'A');AAAAAAAAAAAAAAAA

• Rechteck (4,5);xxxxxxxxxxxx

57

xxxxxxxxxxxx

• Rechteck (2);xxxxxx

• Rechteck ();xxxxxxxxx

Page 58: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Inline-Funktionen

• Funktionsaufrufe kosten Zeit• Funktion wird als inline deklariert

– Compiler ersetzt Funktionsaufruf durch Code der Funktion – Ausführungszeit wird geringer– Programmcode wird länger

• Beispiele

58

• Beispiele– inline float quadrat (float xwert)– inline float haelfte (float ywert)

• nur sinnvoll, wenn Ausführungszeit klein ist im Vergleich zum Verwaltungsaufwand

• nur eine Empfehlung an den Compiler

Page 59: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Inline-Funktion (Beispiel)

#include <iostream>using namespace std;float quadrat (float zahl);float haelfte (float zahl);int main(){float zahl=0;

59

float zahl=0;cout << "Eine Zahl eingeben \n";cin >> zahl;cout <<"Quadriert: " << quadrat(zahl) << "\n";cout << "Haelfte: " << haelfte(zahl) << "\n";return 0; }inline float quadrat (float zahl)

{return(zahl*zahl);}inline float haelfte (float zahl)

{return (zahl/2);}

Page 60: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Inline-Funktion (Beispiel)

#include <iostream.>using namespace std;float quadrat (float zahl);float haelfte (float zahl);int main(){float zahl=0;

#include <iostream>using namespace std;int main(){float zahl=0;cout << "Eine Zahl eingeben \n";

60

float zahl=0;cout << "Eine Zahl eingeben \n";cin >> zahl;cout <<"Quadriert: " << quadrat(zahl);cout << "Haelfte: " << haelfte(zahl);return 0; }inline float quadrat (float zahl)

return(zahl*zahl);inline float haelfte (float zahl)

return (zahl/2);

cout << "Eine Zahl eingeben \n";cin >> zahl;cout <<"Quadriert: " << (zahl*zahl);cout << "Haelfte: " << (zahl/2);return 0; }

Page 61: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Überblick

• Strukturen• Memberfunktionen• Klassen• Vererbung

61

Page 62: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Komplexe Datentypen: Strukturen

• ist ähnlich einem Feld• Zusammenfassung mehrerer Variablen zu einem neuen Namen• Variablen können unterschiedliche Datentypen haben• Variablen zu einem Thema werden zusammengefasst• Variablen einer Struktur werden als Elemente bezeichnet• jedes Element kann jederzeit angesprochen werden

62

• jedes Element kann jederzeit angesprochen werden • können wie normale Variable behandelt werden • sinnvoll, wenn Informationen der Gruppe bearbeitet werden sollen • Beispiele:

– Personendaten (Name, Vorname, Straße, Ort)– Koordinaten eines Punktes (x-, y- und z-Koordinaten)– Datum (Tag, Monat, Jahr)

Page 63: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Deklaration einer Struktur

• allgemein: struct structname {

Datentyp strukvar1; Datentyp strukvar2; ...Datentyp strukvarn;

63

Datentyp strukvarn; };

• Beispiel: struct zeit {

int stunden; int minuten; int sekunden;

};

Page 64: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strukturvariable definieren

• Bereitstellung von Speicherplatz• bei der Deklaration

struct koord {int x; int y;

}; erste,zweite;

64

}; erste,zweite;

• separatstruct koord erste,zweite;

Page 65: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Zugriff auf Strukturelement

• Strukturelemente lassen sich wie normale Variablen verwenden• Zugriff über Strukturelement-Operator (.)• wird auch als Punktoperator bezeichnet• Punktoperator verbindet Strukturvariable mit einer Komponente• Element ansprechen mit:

varname.strukvar;

65

varname.strukvar;

Page 66: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strukturen verwenden

#include <iostream>using namespace std;struct zeit {

int stunden; int minuten;

};

66

};int main(){struct zeit start={10,20};struct zeit ende={18,34};cout << "Startzeit: " << start.stunden << "\n";cout << "Endzeit: " << ende.minuten << "\n";return 0; }

Page 67: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strukturen verwenden

#include <iostream>using namespace std;struct zeit {

int stunden; int minuten;

};

• Programm übersetzen: – g++ -o struc1.exe struc1.cpp

• Programm ausführen: – ./struc1.exe

• Programmausgabe:

Startzeit: 10

67

};int main(){struct zeit start={10,20};struct zeit ende={18,34};cout << "Startzeit:" << start.stunden <<

"\n";cout << "Endzeit: " << ende.minuten <<

"\n";return 0; }

Endzeit: 34

Page 68: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Mit Strukturen arbeiten

#include <iostream>using namespace std;struct zeit {

int stunden; int minuten;

};int main()

68

int main(){struct zeit start={10,20};struct zeit neuezeit={00,00};cout << "alte Zeit vorher " << start.stunden << "\n";cout << "neue Zeit vorher " << neuezeit.stunden << "\n";neuezeit.stunden=start.stunden+5;cout << "alte Zeit" << start.stunden << "\n";cout << "neue Zeit" << neuezeit.stunden << "\n";return 0; }

Page 69: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Mit Strukturen arbeiten

#include <iostream>using namspace std;struct zeit {

int stunden; int minuten;

};int main(){

• Programmübersetzung: – g++ -o struc2.exe struc2.cpp

• Programmausführung: – ./struc2.exe

• Programmausgabe:

alte Zeit vorher: 10

69

{struct zeit start={10,20};struct zeit neuezeit={00,00};cout << "alte Zeit vorher " << start.stunden << "\n";cout << "neue Zeit vorher " << neuezeit.stunden <<

"\n";neuezeit.stunden=start.stunden+5;cout << "alte Zeit" << start.stunden << "\n";cout << "neue Zeit" << neuezeit.stunden << "\n";return 0; }

alte Zeit vorher: 10neue Zeit vorher: 0alte Zeit: 10neue Zeit: 15

Page 70: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strukturen an Funktionen übergeben

#include <iostream>using namespace std;struct daten {

float betrag;char vorname[30];char nachname[30];

} rec;

void ausgabe (struct daten x){cout << "Spender " << x.vorname <<

x.nachname << "gab " << x.betrag << "Euro \n";

}

70

} rec;void ausgabe (struct daten x);int main (){cout << "Bitte Vor und Nachnamen eingeben \n";cin >> rec.vorname >> rec.nachname;cout << "Bitte die Spendenhöhe eingeben \n";cin >> rec.betrag;

ausgabe (rec);

return 0;}

}

Page 71: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strukturen an Funktionen übergeben

#include <iostream>using namespace std;struct daten {

float betrag;char vorname[30];char nachname[30];

} rec;

void ausgabe (struct daten x){cout << "Spender " << x.vorname <<

x.nachname << "gab " << x.betrag << "Euro \n";

}

71

} rec;void ausgabe (struct daten x);int main (){cout << "Bitte Vor und Nachnamen eingeben \n";cin >> rec.vorname >> rec.nachname;cout << "Bitte die Spendenhöhe eingeben \n";cin >> rec.betrag;

ausgabe (rec);

return 0;}

}

Programmausgabe:Bitte Vor- und Nachnamen eingebenHans Meier Bitte die Spendenhöhe eingeben333Spender Hans Meier gab 333 Euro

Page 72: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Strukturen in C++

• Strukturen in C: – es können nur Variablen in einer Struktur definiert werden

• Strukturen in C++: – Es können Daten und Funktionen definiert werden– � Memberfunktionen

72

– � Memberfunktionen

Page 73: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Member-Funktion: Definition in Struktur

#include<iostream>using namespace std;struct zeit {

int stunden; int minuten; void zeitausgeben(void){cout << stunden <<“.”<< minuten<<“\n”;

Programmausgabe: Startzeit: 10:20Endzeit: 12:20

73

cout << stunden <<“.”<< minuten<<“\n”;}

};int main (){struct zeit start={10,20};struct zeit ende={12,20};cout << "Startzeit ";start.zeitausgeben();cout << "Endzeit ";ende.zeitausgeben();return 0;}

Page 74: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Member-Fkt.: Definition außerhalb der Struktur

#include<iostream>using namespace std;struct zeit {

int stunden; int minuten; void zeitausgeben(void);

};int main ()

void zeit::zeitausgeben(void){cout << stunden <<":" << minuten<< "\n";}

Programmausgabe: Startzeit: 10:20

74

int main (){struct zeit start={10,20};struct zeit ende={12,20};

cout << "Startzeit ";start.zeitausgeben();cout << "Endzeit ";ende.zeitausgeben();

return 0;}

Startzeit: 10:20Endzeit: 12:20

Page 75: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Member-Funktion: Beispiel 2

#include<iostream>using namespace std;struct zeit {

int stunden; int minuten; void zeitausgeben(void);void addstunde(void);

};

void zeit::zeitausgeben(void){cout << stunden <<":" << minuten<< "\n";}void zeit::addstunde(void){stunden=stunden+1;}

75

};int main (){struct zeit start={10,20};struct zeit ende={12,20};struct zeit neuezeit={00,00};neuezeit=start;neuezeit.addstunde();cout << "Startzeit ";start.zeitausgeben();cout << "Endzeit ";ende.zeitausgeben();cout << "Neue Zeit ";neuezeit.zeitausgeben();return 0;}

Page 76: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Member-Funktion (Beispiel 2)

#include<iostream>using namespace std;struct zeit {

int stunden; int minuten; void zeitausgeben(void);void addstunde(void);

};int main ()

void zeit::zeitausgeben(void){cout << stunden <<":" << minuten<< "\n";}void zeit::addstunde(void){stunden=stunden+1;}

76

int main (){struct zeit start={10,20};struct zeit ende={12,20};struct zeit neuezeit={00,00};neuezeit=start;neuezeit.addstunde();cout << "Startzeit ";start.zeitausgeben();cout << "Endzeit ";ende.zeitausgeben();cout << "Neue Zeit ";neuezeit.zeitausgeben();

return 0;}

Programmausgabe: Startzeit: 10:20Endzeit: 12:20Neue Zeit: 11:20

Page 77: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Objektorientierte Grundlagen

• Ideen der objektorientierten Konzepte: – Daten und Programmcode werden zusammengefasst– Operationen und Methoden stellen die Schnittstelle nach außen dar

• Geheimhaltungsprinzip: Daten von außen nicht sichtbar• Konzept: Black Box

– Eigenschaften und Methoden können durch Vererbung weiter gegeben

77

– Eigenschaften und Methoden können durch Vererbung weiter gegeben werden

Page 78: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Objektorientierte Programmierung (OOP)

• abstrahiert Gegenstände der realen Welt• in einer Klasse werden Daten, die ein Objekt beschreiben und Prozeduren, die

ein Objekt verändern in einer Struktur zusammen gefasst• in der OOP werden

– Klassen gebildet, um Gruppen von Objekten zu beschreiben – Objekte erstellt, um einen Gegenstand der realen Welt abzubilden

78

– Objekte erstellt, um einen Gegenstand der realen Welt abzubilden – Nachrichten zwischen Objekten verschickt

• andere Sichtweise der Programmierung: – keine top-down-Programmierung – Programm wird aus Modulen aufgebaut, die unabhängig voneinander getestet

werden können

Page 79: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Objekte

• abstrahieren einen realen Gegenstand• haben bestimmte Eigenschaften und Methoden • berichten über ihren Zustand und können diesen über Methoden verändern• kommunizieren mit anderen Objekten über Schnittstellen• gekapselte Datenstruktur• enthält sowohl Datenkomponenten als auch zu ihrer Bearbeitung dienende

79

• enthält sowohl Datenkomponenten als auch zu ihrer Bearbeitung dienende Methoden

Page 80: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Klassen

• zentrale Datenstrukturen in C++• sind eine Erweiterung des komplexen Datentyps struct• Sammlung von Variablen kombiniert mit einer Gruppe von Funktionen• fassen Objekte mit den gleichen Eigenschaften und Methoden zusammen• kapseln zusammengehörige Daten und Funktionen vom Rest des Programms ab• Elementvariablen: Variablen einer Klasse

80

• Elementvariablen: Variablen einer Klasse• Elementfunktionen o. Methoden: Funktionen in einer Klasse

• Beispiel: – Klasse Verkehrsteilnehmer: Auto, Fahrrad, Fußgänger– Klasse Verkehrszeichen: rote Ampel, grüne Ampel, Stop-Schild– Klasse KFZ: Audi, Golf, Seat– Klasse Auto: Reifen, Motor, Autoradio, sitzen

Page 81: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Klassen

• Bestandteile einer Klasse: – Datenelemente

• Attribute– Elementfunktionen

• Methodem • dienen zum Nachrichtenaustausch

81

• dienen zum Nachrichtenaustausch– Zugriffsbeschränkungen für die Elemente

• Festlegung, wer auf die Elemente dieser Klasse zugreifen darf

Page 82: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Klassen (Definition)

• erfolgt mit dem Schlüsselwort class• Klasse Deklaration:

class zeit {int stunden; int minuten;

};

82

};

• Objekte deklarieren: zeit startzeit; zeit endzeit;

• Objekt ist eine eigenstämdige Instanz einer Klasse• mit Objekten kann man arbeiten • Zugriff auf die einzelnen Element erfolgt wie bei den Strukturen (Punktoperator)

Page 83: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Klassen

#include<iostream>using namespace std;class zeit {

int stunden; int minuten; int sekunden; void zeitausgeben(void);void addstunde(void);

};

void zeit::zeitausgeben(void){cout << stunden <<":" << minuten<<":"

<<sekunden << "\n";}void zeit::addstunde(void){stunden=stunden+1;

83

};int main (){zeit startzeit={10,20,55};zeit endzeit={12,20,55};zeit neuezeit={00,00,00};neuezeit=startzeit;neuezeit.addstunde();cout << "Startzeit ";startzeit.zeitausgeben();cout << "Endzeit ";endzeit.zeitausgeben();cout << "Neue Zeit ";neuezeit.zeitausgeben();return 0;}

stunden=stunden+1;}

--> Fehler bei der Übersetzung !!

Page 84: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Klassen: Zugriffstypen

• C++ kennt 3 zusätzliche Schlüsselwörter für die Zugriffserlaubnis: – public (öffentlich)– private (privat)– protected (geschützt)

• per default sind alle Mitglieder einer Klasse privat (Datenelemente und Memberfunktionen)

84

Memberfunktionen)• in Strukturen ist der Zugriff per default öffentlich

Page 85: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Klassen: private Daten

• auf private Elemente kann man nur über die Member-Funktion zugreifen• kein Zugriff von außen möglich, d.h. Elemente sind versteckt• public: auf diese Daten und Funktionen kann auch von außen zugegriffen werden

• Beispiel: class koord{

85

class koord{int xwert; int ywert;

};int main(){koord punktpunkt.xwert=1;return 0;}

Page 86: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Klassen: private Daten

• auf private Elemente kann man nur über die Member-Funktion zugreifen

• Beispiel: class koord{

int xwert; int ywert;

86

int ywert; };int main(){koord punktpunkt.xwert=1; --> Fehler, da Daten privat sindreturn 0;}

Page 87: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Klassen: private Daten

• auf private Elemente kann man nur über die Member-Funktion zugreifen• Beispiel:

class koord{public:int xwert; int ywert;

87

int ywert; };int main(){koord punktpunkt.xwert=1; return 0;}

Page 88: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Klassen

#include<iostream>using namespace std;class zeit {

public:int stunden; int minuten; void zeitausgeben(void);void addstunde(void);

void zeit::zeitausgeben(void){cout << stunden <<":" << minuten << "\n";}void zeit::addstunde(void){stunden=stunden+1;}

88

void addstunde(void);};int main (){zeit startzeit={10,20};zeit endzeit={12,20};zeit neuezeit={00,00};neuezeit=startzeit;neuezeit.addstunde();cout << "Startzeit ";startzeit.zeitausgeben();cout << "Endzeit ";endzeit.zeitausgeben();cout << "Neue Zeit ";neuezeit.zeitausgeben();return 0;}

Programmausgabe:

Startzeit: 10:20

Endzeit: 00:00

Neue Zeit: 11:20

Page 89: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Zugriffsfunktion

• steuern den Zugriff auf eine Klasse• erlauben die Verkapselung der Funktionalität und der Daten • Code wird dadurch leichter wartbar• Zugriffsschutz ist ein wichtiger Teil des objektorientierten Programmierens

89

Page 90: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Zugriffsbeschränkungen

• public: – nachfolgende Elemente u. Methoden unterliegen keiner Zugriffsbeschränkung– können beliebig verändert und aufgerufen werden

• private: – nachfolgende Elemente u. Methoden nur innerhalb der Klasse zugreifbar– keine Veränderung von außen möglich

90

– keine Veränderung von außen möglich

Page 91: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Vererbung

• stellt eine Beziehung zwischen Klassen dar• jede Klasse erbt von Ihrer Basisklasse Eigenschaften und Methoden• geerbte Eigenschaften und Methoden können überlagert und ergänzt werden

91

Page 92: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Basis- und Subklassen

• Basisklassen: – vererben Eigenschaften und Methoden an Subklassen – können selbst Subklassen von anderen Klassen sein

• Subklassen: – verfügen über alle Eigenschaften der Basisklasse

92

– verfügen über alle Eigenschaften der Basisklasse– können geerbte Eigenschaften verändern– können zusätzliche Eigenschaften und Methoden haben

• Basisklasse: Fahrzeuge– Landfahrzeuge: Eisenbahn, Auto, Bus– Wasserfahrzeuge: Segelboot, Motorboot, Kanu– Luftfahrzeuge: Flugzeug, Zeppelin, Heissluftballon

Page 93: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Basisklasse definieren

#include <iostream>using namespace std;class Vogel{public:void fliege();};int main(){

93

{cout << “Basisklasse: \n“ ;Vogel vogel1;vogel1.fliege();return 0;}void Vogel::fliege(){cout << "Ich kann fliegen \n";}

Page 94: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Basssklasse definieren

#include <iostream>using namespace std;class Vogel{public:void fliege();};int main()

• Programmausgabe

Basisklasse: Ich kann fliegen

94

int main(){cout << “Basisklasse: \n“ ;Vogel vogel1;vogel1.fliege();return 0;}void Vogel::fliege(){cout << "Ich kann fliegen \n";}

Page 95: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Subklasse definieren

#include <iostream>using namespace std;class Vogel{public:void fliege();

};class Singvogel:public Vogel

cout << "Subklasse: \n";saenger.fliege();saenger.sing();return 0;

95

class Singvogel:public Vogel{public:void sing();};int main(){Vogel vogel1;Singvogel saenger;cout << "Basisklasse: \n";vogel1.fliege();

void Vogel::fliege(){cout << "Ich kann fliegen \n";}void Singvogel::sing(){cout << "Ich kann singen \n";}

Page 96: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Subklasse: Programmausgabe

• Programmausgabe:

Basisklasse:Ich kann fliegenSubklasse:Ich kann fliegenIch kann singen

96

Ich kann singen

Page 97: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

Zugriffsrechte Basisklasse

• public: – public-Elemente sind in der Basisklasse und der Subklasse öffentlich

• private: – Basisklasse und Subklasse haben eigene Elemente– Subklasse hat keinen Zugriff auf private Elemente der Basisklasse

97

– Subklasse hat keinen Zugriff auf private Elemente der Basisklasse

• protected: – Elemente der Basisklasse sind vor einem Zugriff von außen geschützt– Subklassen können auf protected Elemente der Basisklasse zugreifen

Page 98: C++ als Erweiterung von C - Rechenzentrum der CAU€¦ · C++ als Erweiterung von C Strings in C++ • C++ kennt keinen Datentyp für Strings • es gibt eine Klasse string, in deren

Rechenzentrum

C++ als Erweiterung von C

98

Übungsblatt