Von Java nach C++ Frank Weichert Lehrstuhl Informatik VII Technische Universität Dortmund

Ähnliche Dokumente
Von Java nach C++ Dr. Frank Weichert Lehrstuhl Informatik VII Technische Universität Dortmund

Von Java nach C++ Frank Weichert, Heinrich Müller Informatik VII Universität Dortmund

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

Crashkurs C++ - Teil 1

Betriebssystembau: Übungen. Betriebssystembau: Übungen. Betriebssystembau: Einführung C++ Literatur

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

C++ Teil 6. Sven Groß. 23. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 15

C++ Teil 5. Sven Groß. 8. Mai IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai / 16

Betriebssystembau. 1. Übung. Michael Engel Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

C++ - Objektorientierte Programmierung Konstante und statische Elemente

C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

7. Übung Informatik II - Objektorientierte Programmierung

Algorithmen und Datenstrukturen

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

Software ubiquitärer Systeme 1. Übung

Programmierung mit C Zeiger

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

II.1.1. Erste Schritte - 1 -

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

Software ubiquitärer Systeme 1. Übung

C++ vs. Java. Hello world! Java C++ class HelloWorld { static public void main(string args) { System.out.println("Hello World!

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

Einführung in C ++ und die Objektorientierte Programierung

C++ Teil 7. Sven Groß. 26. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 18

Mapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Zeiger, Arrays und Strings in C und C++

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

II.1.1. Erste Schritte - 1 -

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Polymorphismus 44. Function.hpp. #include <string>

8. Referenzen und Zeiger

II.1.1. Erste Schritte - 1 -

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Programmieren in C/C++ und MATLAB

9. Vektoren. (auch Felder/array)

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Polymorphismus 179. Function.h. #include <string>

Repetitorium Informatik (Java)

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Praxis der Programmierung

Objektorientierte Programmierung mit C++ SS 2007

Programmierpraktikum 3D Computer Grafik

Kap. 11 Objektorientierung: ein Beispiel

Einstieg in die Informatik mit Java

Unterlagen. CPP-Uebungen-08/

C++ kompakt - Teil 1. Danke an Matthias Biedermann Markus Geimer

Software ubiquitärer Systeme 2. Übung

Überblick. Peter Sobe 1

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor

Software ubiquitärer Systeme 2. Übung

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Crashkurs C++ Wiederholung

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.

7. Objektorientierung. Informatik II für Verkehrsingenieure

C++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland.

Programmieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden

Praxis der Programmierung

Tag 8 Repetitorium Informatik (Java)

Java Referenzdatentypen genauer betrachtet

Klausur: Grundlagen der Informatik I, am 27. März 2009 Gruppe: F Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

C++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Betriebssystembau (BSB)

Zeiger und dynamischer Speicher

Vorlesungsprüfung Programmiersprache 1

Programmieren in Java

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Peter Prinz Ulla Kirch-Prinz C+ + Lernen und professionell anwenden. ffl mitp

Klassen als Datenstrukturen

Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1

Visuelle Kryptographie. Anwendung von Zufallszahlen

Vorlesung Programmieren

Betriebssystembau (BSB)

Vererbung, Polymorphie

Klausur: Informatik, am 11. Juli 2013 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Einführung in den Einsatz von Objekt-Orientierung mit C++ II

Praxis der Programmierung

2. Programmierung in C

Betriebssystembau. 1. Übung. Olaf Spinczyk und Michael Engel Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

Programmierung und Angewandte Mathematik

C++ - Objektorientierte Programmierung Vererbung

Grundlagen der Informatik 11. Zeiger

Funktionales C++ zum Ersten

Programmierkurs C++ Kapitel 6 Module Seite 1

Prüfung aus PROGRAMMIEREN (2) (C++) (WS 2002/03)

Transkript:

Von Java nach C++ Frank Weichert Lehrstuhl Informatik VII Technische Universität Dortmund http://ls7-www.cs.uni-.de Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 1

Übersicht Einleitung Literatur Vergleich zwischen C++ und Java Klassen in C++ Übersetzungsprozess von C++-Programmen Programmieren in Visual Studio Ausgewählte C++-Konzepte Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 2

Einleitung C makes it easy to shoot yourself in the foot, C++ makes it harder, but when you do, it blows away your whole leg. (Bjarne Stroustrup) Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 3

Literatur Die C++-Programmiersprache, Bjarne Stroustrup, Addison-Wesley Visual C++, Frank Budszuhn, Addison-Wesley Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 4

C++ vs. Java Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 5

C++ vs. Java typisches Programm #include <iostreams.h> int main() { return 0; } import java.awt.*; class Test{ public static void main(string[] argv){ } } Dateinamen beliebig, Konvention *.cpp, *.h <Klassenname>.java generierter Code - Maschinencode - plattformabhängig - *.exe - Java-Byte-Code - plattformunabhängig - *.class Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 6

C++ vs. Java bedingte Anweisungen, Schleifen, Verbundanweisungen, identisch Funktionen globale Funktionen möglich Felder int a[4]; int a[] = {1,2,3}; keine Überprüfung auf Array-Grenzen Konstanten const double pi=3.14; identisch Methoden müssen in einer Klasse stehen int a[] = new int[4]; int a[] = {1,2,3}; Felder sind Objekte, Überprüfung auf Array-Grenzen final double pi=3.14; Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 7

C++ vs. Java (Variablen-) Deklaration keine Default-Werte int a[4]; Default-Werte int a[] = new a[4]; Speicherverwaltung durch den Programmierenden automatisch durch den Garbage Collector Eingabe- und Ausgabeanweisungen cin >> x; cout << x; x=iohelp.read(); System.out.println(x); Boolescher Datentyp bool boolean Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 8

C++ vs. Java Type-Casting (explizite Konvertierung) a) (Typ) Ausdruck in C++ und Java erlaubt Beispiel: int a=3; double b=(double) a / 2; // b = 1.5 b) Typ (Ausdruck) nur in C++ erlaubt Beispiel: int a=3; double b= double(a) / 2; // b = 1.5 Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 9

C++ vs. Java Zusätzliche Java-Funktionalität Automatische Speicherverwaltung Code ist (direkt) systemportabel Strings und Felder Applets Multitasking durch Thread-Modell Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 10

C++ vs. Java Zusätzliche C++-Funktionalität (1) Zeiger (Pointer) Kontrolle des Memory Management Templates Operator-Overloading Mehrfachvererbung Präprozessor Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 11

C++ vs. Java Zusätzliche C++-Funktionalität (2) Einschränkung des Wertebereichs in C++ per unsigned möglich z.b. int: -2 31 bis 2 31 1 unsigned int: 0 bis 2 32 1 Symbolische Konstanten Präprozessorbefehl, erkennbar am # -Zeichen #define PI=3.14 (kein ; am Zeilenende) Typdeklaration Definiert neuen Namen für einen Datentyp typedef int Index; Index a=3; Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 12

Ein einfaches Programm - Quellcodes Java: class BV{ } public static void main(string[] argv){ System.out.println "C++ in der Bildverarbeitung!"; } C++: #include <iostream> using namespace std; int main(int argc){ cout << "C++ in der Bildverarbeitung!"; return 0; } Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 13

Ein einfaches Programm - Übersetzen Java: Dateiname: BV.java Übersetzen: javac BV.java Ausführen: java BV (Java Byte-Code) (Java Virtual Machine) C++: Dateiname: BV.cpp Übersetzen: cl /c BV.cpp Linken: link BV.obj cl BV.cpp Ausführen: BV Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 14

Klassen in C++ Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 15

Klassen in C++ Klassen in C++ = Deklaration + Implementierung Headerdatei (.h) Implementationsdatei (.cpp) Studierende.h: class Studierende{ }; Studierende.cpp: #include "Studierende.h" Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 16

Klassen in C++: Aufbau der Headerdatei Studierende.h: class Studierende{ Konstruktor Destruktor Methoden Attribute public: Studierende(); ~Studierende(); void setzematrikelnummer(int nummer); int gibmatrikelnummer(); private: int matrikelnummer; }; Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 17

Klassen in C++: Aufbau der Headerdatei Spezifizierung einer Klasse mit class Klassen sind immer public Konstruktoren und Destruktoren Konstruktoren: Instanziierung von Objekten Destruktoren: Löschen von instanziierten Objekten (~ vorangestellt) Deklaration von Methoden und Variablen (Instanz-) Variablen dürfen bei der Deklaration nicht initialisiert werden Modifier werden nicht separat spezifiziert Klassendefinition wird mit Semikolon beendet Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 18

Klassen in C++: Aufbau der Implementationsdatei Einbinden der Headerdatei mit include Durch den Klassennamen und dem Bereichsoperator :: wird die Zugehörigkeit zur Klasse gekennzeichnet Studierende.cpp: #include "Studierende.h" Studierende::Studierende(){} Studierende::~Studierende(){} void Studierende::setzeMatrikelnummer(int nummer){ matrikelnummer = nummer; } int Studierende::gibMatrikelnummer(){ return matrikelnummer; } Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 19

Klassen in C++: Aufbau der Implementationsdatei Präprozessoranweisung #include "Studierende.h bindet Headerdatei ein. Nennung von Fully Qualified Names z.b.: Studierende::Studierende() :: wird als Bereichsoperator (Scope Operator) bezeichnet inline-spezifikation möglich z.b.: inline int Studierende::gibMatrikelnummer(){ return matrikelnummer; } Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 20

Übersetzungsprozess von C++-Programmen Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 21

Übersetzen von C++-Programmen Übersetzungsprozess besteht aus drei Komponenten 1. Präprozessor: Vorverarbeitung des Quellcodes 2. Compiler: Überführt Quellcode in Objektcode 3. Linker: Fasst alle Objektdateien zu einem ausführbaren Programm zusammen Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 22

Übersetzen von C++-Programmen Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 23

Übersetzen von C++-Programmen Präprozessor Präprozessorbefehle beginnen mit dem #-Zeichen Sucht im Quellcode nach speziellen Befehlen, z.b. - #include einbinden von Headerdateien a) <name> Standard Libraries aus Systemverzeichnis z.b.: #include <iostream> b) name eigene Dateien aus Projektverzeichnis z.b.: #include "Studierende.h" -> Problem: mehrfache Deklarationen - #define führt textuelle Ersetzungen (Konstanten) aus. z.b.: #define pi 3.14 - #ifdef, #ifndef, Konditionales Kompilieren z.b.: #ifdef DEBUG #endif Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 24

Übersetzen von C++-Programmen Präprozessor -> Problem: mehrfache Deklarationen Lösung: Headerdatei um konditionalen Kopf erweitern z.b.: Studierende.h: #ifndef STUDIERENDE_H #define STUDIERENDE_H class Studierende{ }; #endif Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 25

Übersetzen von C++-Programmen Compiler Generiert aus dem vom Präprozessor vorverarbeiteten Quellcode den Objektcode. Maschinennahe Objektcodedatei kann noch offene Aufrufe enthalten und nicht ausgeführt werden. Überprüfung auf syntaktische Korrektheit - Fehlermeldungen z.b.: error C2065: 'h': nichtdeklarierter Bezeichner - Warnungen z.b.: warning C4244: 'Initialisierung': Konvertierung von 'double' in 'int', möglicher Datenverlust Objektcode wird nur erzeugt, sofern keine Fehler aufgetreten sind. Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 26

Übersetzen von C++-Programmen Linker Generiert (vollständig) ausführbares Programm Fasst die - Objektdateien des Projektes, - Code aus Standard Libraries und - zusätzliche Libraries zusammen Zwei mögliche Link-Modi - statisch - dynamisch Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 27

Programmieren in Visual Studio Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 28

C++-Programm mit Visual Studio Neues Projekt anlegen: Datei -> Neu -> Projekt Projekttyp festlegen Projektnamen und Verzeichnis auswählen Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 29

C++-Programm mit Visual Studio Initiales Arbeitsfenster der Entwicklungsumgebung Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 30

C++-Programm mit Visual Studio Klasse hinzufügen (Header- und Implementationsdatei) Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 31

C++-Programm mit Visual Studio Typ der Klasse auswählen, die hinzugefügt werden soll Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 32

C++-Programm mit Visual Studio Klassennamen festlegen Modifikator und Basisklasse (optional) bestimmen Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 33

C++-Programm mit Visual Studio Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 34

C++-Programm mit Visual Studio Ausführbares Programm erstellen - Kompilieren (Strg+F7) - Programm ausführen (Strg+F5) - Programm unter Debugger ausführen (F5) Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 35

C++-Programm mit Visual Studio Dateitypen von Visual-Studio Extension *.cpp *.h *.exe *.dsp *.dsw *.obj *.rc *.res C++-Quelldatei C++-Headerdatei Ausführbares Programm Bedeutung Informationen zum Projekt. Projekt kann über dsp- Datei geöffnet werden Informationen zum Arbeitsbereich. Dieser sollte auch über diese Datei geöffnet werden. Nicht eingebundene Kompilate (Objekt-Dateien) Ressourcen-Skriptdatei Binäre Ressourcendatei des Linkers Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 36

Ausgewählte C++-Konzepte Komplexe Datentypen Zeiger und Referenzen Vererbung STL Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 37

Komplexe Datentypen Benutzerdefinierter Datentyp mit eindeutigem Namen typedef struct{ double x, y, z; } vector3d; int main() { vector3d veca = {0.4, 4, 6.2}; vector3d vecb; vecb = veca; // vecb = {0.4, 4, 6.2} double a = veca.z; // a = 6.2 Zugriff auf Elemente mit. -Operator Bei Zuweisungen werden komplette Strukturen kopiert Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 38

Ausgewählte C++-Konzepte Komplexe Datentypen Zeiger und Referenzen Vererbung STL Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 39

Objekte instanziieren und löschen ProgrammStudierende.cpp: #include "Studierende.h" int main(int argc, char* argv[]){ Studierende* einstudent = new Studierende(); delete einstudent; } return 0; Instanziierung eines Objektes vom Typ Studierende Studierende*: Variablendeklaration einstudent: Zeiger auf Studierende new: Ruft Konstruktor auf und legt Objekt vom angegebenen Typ im Speicher an delete ruft Destruktor der Klasse auf und gibt den zuvor belegten Speicher wieder frei (kein Garbage Collector wie in Java) Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 40

Zeiger und Referenzen Anweisung: Studierende* einstudent = new Studierende(); Repräsentierung: 0x0000 0x1200 Studierende int matrikelnummer Speicher Studierende* einstudent = 0x1200 0xffff Klasseninstanz Zeiger Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 41

Zeiger und Referenzen Zeiger (Pointer): Variable, dessen Wert auf die Position (Speicheradresse) eines anderen Objektes zeigt. eigener Datentyp typisiert durch Zeichen * gekennzeichnet Beispiel: a) kein Zeiger: int a; b) mit Zeiger: int* a; Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 42

Zeiger und Referenzen Adresse Speicherstelle, die für ein Objekt zur Verfügung gestellt wird. Die Adresse wird bei der Objekt- Instanziierung und der damit verbundenen Bereitstellung des benötigten Speichers vergeben. Inhalt Wert (Daten), der für ein Objekt unter einer Adresse gespeichert wird. Initiale Belegung erfolgt durch den Konstruktor. Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 43

Zeiger und Referenzen Pointer: Pointer (Pointervariable) ist eine Variable in der eine Adresse gespeichert wird. Die Variable hat den identischen Typ wie die Variable, deren Adresse gespeichert wird. Dereferenzierungsoperator * : Zugriff auf den Wert, der in der Pointervariablen gespeicherten Adresse steht ( Wert, auf den der Pointer verweist ) Referenzoperator & : Liefert für eine Variable die zugehörige Speicheradresse Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 44

Zeiger und Referenzen Pointer-Deklaration Adresse Name int *iptr;??? 10012 10013 iptr 10014 Pointer-Deklaration und Initialisierung Adresse Name int *iptr=0; NULL 10012 10013 iptr 10014 Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 45

Zeiger und Referenzen Deklaration eines primitiven Datentyps Adresse Name 10824 int i=423; 423 10825 i 10826 Pointer-Initialisierung und Adressoperator Adresse Name int *iptr=0; iptr = &i; 10825 NULL 10012 10013 10014 iptr Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 46

Zeiger und Referenzen Vereinfachte grafische Repräsentierung Adresse Name 423 10824 10825 10826 i i 423 Adresse Name iptr 10825 10012 10013 10014 iptr Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 47

Zeiger und Referenzen Initialisierung von Pointern int a = 423; a 423 int b = 78; b 78 int *ptr_1 = &b; ptr_1 int *ptr_2 = ptr_1; ptr_2 int *ptr_3 = &a; ptr_3 Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 48

Zeiger und Referenzen Pointer Aliasing: Zwei Pointer enthalten dieselbe Adresse a 423 *ptr_1 = *ptr_3; ptr_2 = ptr_3; b ptr_1 ptr_2 423 78 ptr_3 Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 49

Zeiger und Referenzen Zeigervariablen können auch auf einen weiteren Zeiger verweisen Auch iteriete Pointer-Anwendungen sind möglich Jeder * -Operator im Ausdruck entspricht einer Dereferenzierung int a = 423; a 423 int *ptr = &a; ptr int **ptrptr = 0; ptrptr = &ptr; ptrptr NULL Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 50

Zeiger und Referenzen Anwendungsbeispiel #include <iostream> #include "Studierende.h" using namespace std; int main(int argc, char* argv[]){ Studierende* einstudent = new Studierende(); einstudent->setzematrikelnummer(88456); Studierende zweiterstudent; zweiterstudent.setzematrikelnummer(87393); Studierende* ptr_zweiterstudent = &zweiterstudent; cout << ptr_zweiterstudent << endl; Studierende* dritterstudent = NULL; dritterstudent->setzematrikelnummer(89263); delete einstudent; delete dritterstudent; return 0; } Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 51

Zeiger und Referenzen Zeiger einstudent, der auf Objekt vom Typ Studierende zeigt Über Operator -> (Dereferenzieren) Methode aufrufen ( es wird einem Zeiger gefolgt ) Studierende* einstudent = new Studierende(); einstudent->setzematrikelnummer(88456); zweiterstudent als (statische) Instanz Methodenaufruf für statische Instanzen über Punktoperator Studierende zweiterstudent; zweiterstudent.setzematrikelnummer(87393); Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 52

Zeiger und Referenzen Pointer auf statische Instanz über Referenzoperator & Studierende* ptr_zweiterstudent = &zweiterstudent; cout << ptr_zweiterstudent << endl; Zeiger für ein Objekt, der mit NULL initialisiert wird Methodenaufruf führt zu einem Laufzeitfehler (Exception) Studierende* dritterstudent = NULL; dritterstudent->setzematrikelnummer(89263); Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 53

Ausgewählte C++-Konzepte Komplexe Datentypen Zeiger und Referenzen Vererbung STL Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 54

Vererbung einfache Vererbung: Klasse Bachelor erbt von Klasse Studierende Vererbungsoperator : (entspricht extends in Java) Studierende Bachelor Studierende.h: class Studierende{ }; Bachelor.h: #include "studierende.h" class Bachelor : public Studierende{ public: Bachelor(); ~Bachelor(); }; Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 55

Vererbung Mehrfachvererbung: Klasse Bachelor erbt von Klassen Studierende und HiWi Studierende HiWi Bachelor Bachelor.h: #include "studierende.h" #include "HiWi.h" class Bachelor : public Studierende, public HiWi{ public: Bachelor(); ~Bachelor(); }; Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 56

Ausgewählte C++-Konzepte Komplexe Datentypen Zeiger und Referenzen Vererbung STL Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 57

STL Standard-Template-Library (kurz STL) Vordefinierte Templates für viele Anwendungsbereiche STL gliedert sich in drei Teilbereiche auf: 1.) Container: Speicherstrukturen, z.b. Bäume, Listen, 2.) Algorithmen: Operatoren für Container-Klassen, z.b. Sortieren einer Liste 3.) Iteratoren: Traversierungsoperatoren für Container-Klassen Einbinden der Headerdateien per include ohne Endung.h Beispiel: #include<list> Notwendigkeit des korrekten Namespace, geschieht durch die Anweisung using namespace std; Infos zur STL: Silicon Graphics Inc., http://www.sgi.com/tech/stl Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 58

STL Anwendungsbeispiel: #include <list> #include "Studierende.h" using namespace std; int main(int argc, char* argv[]){ Studierende* student1 = new Studierende(); Studierende* student2 = new Studierende(); } list<studierende*> listestudierende; listestudierende.push_back(student1); listestudierende.push_back(student1); Einbinden der Headerdatei für die Container-Klasse list. Instanziierung einer Liste listestudierende, die Zeiger auf Objekte vom Typ Studierende speichern kann. Methode push_back fügt Zeiger auf Typ Studierende der Liste an. Vorkurs Informatik, Von Java nach C++, LS VII, TU Dortmund, WS 2009/2010 59