C++ - Eine Ubersicht fur Java-Programmierer



Ähnliche Dokumente
Vorkurs C++ Programmierung

Zählen von Objekten einer bestimmten Klasse

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Einführung in die Programmierung

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Klausur in Programmieren

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Algorithmen und Datenstrukturen

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Objektorientierte Programmierung

Angewandte Mathematik und Programmierung

Einführung in die Programmierung (EPR)

1. Übung zu "Numerik partieller Differentialgleichungen"

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

Java: Vererbung. Teil 3: super()

Prinzipien Objektorientierter Programmierung

Grundlagen. Kapitel 1

Programmieren in Java

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

2. Semester, 2. Prüfung, Lösung

12. Vererbung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Client-Server-Beziehungen

Objektorientierte Programmierung mit C++ Vector und List

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Java Kurs für Anfänger Einheit 5 Methoden

Java Virtual Machine (JVM) Bytecode

Vererbung & Schnittstellen in C#

Grundlagen von Python

C vs. C++ Sebastian Meyer. Proseminar C - Grundlagen und Konzepte. Universität Hamburg

Einführung in die Programmierung

Deklarationen in C. Prof. Dr. Margarita Esponda

Software Engineering Interaktionsdiagramme

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Einführung in die C++ Programmierung für Ingenieure

Gebundene Typparameter

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Alltagsnotizen eines Softwareentwicklers

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Computeranwendung und Programmierung (CuP)

Klassenbeziehungen & Vererbung

Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

Objektorientierung: Klassen und Objekte

Programmentwicklung mit C++ (unter Unix/Linux)

Informatik I (D-MAVT)

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Programmiersprache 2 (C++) Prof. Dr. Stefan Enderle NTA Isny

DLLs (dynamic loaded libraries) mit MingW erstellen

Objektorientierte Programmierung. Kapitel 12: Interfaces

Propädeutikum. Dipl.-Inf. Frank Güttler

Modellierung und Programmierung 1

C/C++-Programmierung

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 16. Juli 2005 Dr. Alfons Huhn, Timotheus Preisinger

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

GetName(), GetName(), GetGeschlecht() und AelterWerden().

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Programmieren Tutorium

SEP 114. Design by Contract

Projektverwaltung Problem Lösung: Modulare Programmierung

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

13. Tutorium zu Programmieren

Kurze Einführung in die Programmiersprache C++ und in Root

Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Zur Erinnerung.

Objektorientierte Programmierung

C++-Zusammenfassung. H. Schaudt. August 18, 2005

5. Abstrakte Klassen

Kapitel 6. Vererbung

Installation und Inbetriebnahme von Microsoft Visual C Express

2. Programmierung in C

Einführung in die C-Programmierung

Klausur in Programmieren

Universität Karlsruhe (TH)

Objektorientiertes Programmieren für Ingenieure

Einführung in Javadoc

Einführung in die Java- Programmierung

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Javakurs zu Informatik I. Henning Heitkötter

Kapitel 6. Vererbung

Große Übung Praktische Informatik 1

Objektorientierte Programmierung OOP

C# im Vergleich zu Java

Klausur in Programmieren

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Kapitel 4. Mehrfachvererbung. Beispiel 1: typische Diamant Struktur. Person. Hiwi

Kapitel 6. Vererbung

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

C A R L V O N O S S I E T Z K Y. Boost C++ Libraries. Johannes Diemke. Department of Computer Science Learning and Cognitive Systems

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

Einführung in die Java- Programmierung

.NET Code schützen. Projekt.NET. Version 1.0

Transkript:

C++ - Eine Ubersicht fur Java-Programmierer Daniel Wasserrab Lehrstuhl fur Programmierparadigmen Universitat Karlsruhe 23. April 2008

C++ I Entwickelt Anfang der 80er von Bjarne Stroustrup I Beeinut von SIMULA-67 I 1985: Cfront, erster kommerzieller Compiler I Standardisiert von der ISO 1998 I dazwischen zahllose Erweiterungen

Eigenschaften I Konzipiert als \C mit Klassen" I Multiparadigmen-Sprache: I Prozedurale Programmierung I Modulare Programmierung I Strukturierte Programmierung I Objektorientierte Programmierung I Generische Programmierung I Maschinennahe Programmierung moglich

Pointer I Java Referenz == C++ Pointer I A* ist ein Pointer auf A I Zugrie auf Members mit -> I Auch Pointer auf Basisdatentypen und Pointer I Loschen eines Objektes mit delete class A { public : void f () { } };... A* a= new A () ; a ->f () ; delete a; a ->f () ; // undefiniert

\echte" Objekte I Objekt wird bei Deklaration angelegt I Objekt wird am Ende des Blockes geloscht I Zugrie auf Members mit. I Speicher fur Objekt auf dem Stack class A { public : A( int a) { } void f () { } };... { A a (3) ; // Konstruktor a.f () ; } a.f () ; // Compiler - Fehler

Pointer und Objekte I &a erzeugt einen Pointer auf a I *a liefert den Inhalt von a class A { public : void f () { } };... A* ap ; { A a; ap =& a; ap ->f () ; a.f () ; (* ap ).f () ; } ap ->f () ; // undefiniert

Referenzen I Alias fur ein Objekt I A& ist eine Referenz auf A I Referenzen mussen initialisiert werden! I Bei Parametern: Call-by-reference class A { public : int x; }; A a1 ; a1.x =5; A a2 ; a2.x =6; A& p; // Compiler - Fehler A& r= a1 ; cout << r.x << endl ; // 5 r= a2 ; // Objekt - Kopie! cout << r.x << " " << a1.x << endl ; // 6 6 r.x =7; cout << a1. x << " " << a2. x << endl ; // 7 6

Destruktoren I Automatischer Aufruf vor Zerstorung des Objektes I geeignet zum Resourcen-Management class A { public : A () { cout << " hello, "; } ~A () { cout << "!"; } who ( char * who ) { cout << who } };... { A a; a. who (" Harry "); } ) hello, Harry!

Speicherverwaltung I Keine eingebaute Garbage-Collection! I Manuelle Speicherverwaltung: new und delete I Der Programmierer hat dafur zu sorgen, da nach dem Loschen keine Pointer auf das Objekt mehr verwendet werden! I aber: die Art der Speicherverwaltung ist anderbar I Auto-Pointer I Reference-Counting I Garbage-Collection als Library erhaltlich

Mehrfachvererbung I Eine Klasse kann beliebig viele Oberklassen haben class A { class B { public : public : void f () ; void g () ; void g () ; void h () ; }; }; class C : public A, public B { };... C c; c.f () ; // ruft A :: f () auf c.h () ; // ruft B :: h () auf c.g () ; // Compilerfehler

Methoden-Deklarationen in Klassen I void f()... I void f(); Forward-Deklaration, der Rumpf ist woanders deniert I static void f()... I virtual void f()... Virtuelle Methode, kann in Unterklasse uberschrieben werden I virtual void f()= 0; Abstrakte Methode, mu in Unterklasse uberschrieben werden I void f()const... Methode kann keine Instanzvariablen andern

Zugrisrechte I Zugrisrechte werden ggf. fur mehrere Members gesetzt I Innerhalb von Klassen: private ist default I protected erweitert nur auf Unterklassen I Mit friend konnen Ausnahmen gemacht werden I bei Vererbung: Sichtbarkeit der Vererbung class A { public : void f () {... } }; class B : private A { public : void g () { f () ;... } };... B b; b.g () ; b.f () ; // Compiler - Fehler A* a = &b; // Compiler - Fehler

Operator Overloading I Fur eigene Klassen konnen die Standard-Operatoren deniert werden: I bool operator ==(A a1, A a2); I bool operator ==(A a, B b); I C operator *(A a, B b); I ostream& <<(int, ostream &); I erhoht richtig eingesetzt die Lesbarkeit: m[" Alter " ][ " Harry " ]=43; I Sogar Cast- und Zugris-Operatoren konnen uberladen werden: class B { public : A* operator - >() {... } };

Standard-Bibliothek I Ursprunglich nur C-Bibliothek I Heute: STL (Container) + Streams (I/O) I Keine Klassenbibliothek I Weitere Bibliotheken in der Normung I Prinzipiell jede C Bibliothek einbindbar I Fur system-nahe Programmierung C-Bibliothek weiter notwendig

Preprocessor Jeder Quellcode wird vor dem Compilieren durch den \Preprocessor" geschickt: I #include <filename.h> Fugt den Text aus der Datei lename ein. I #define MACRO value Ersetzt jedes Vorkommen von MACRO durch value I #define MAX(m,n)((m)>(n)?(m):(n)) Macros konnen Argumente haben I #if BEDINGUNG... #endif Bedingte Kompilation: Text dazwischen wird nicht eingesetzt, wenn BEDINGUNG falsch ist \Hello World" nach Praprozessor: 30000 LOC.

Namespaces I In groen Projekten (> 10 6 LOC) sind Namenskonikte fast unvermeidlich I Typisch: Libraries von unterschiedlichen Herstellern I Namenskonventionen helfen nur bedingt I zu lange Bezeichnernamen machen Code unubersichtlich I Java mibraucht Klassen (e.g. java.lang.math)

Namespaces (Syntax) # include < iostream > // alles in namespace " std "... std :: cout << "... " << std :: endl ;... using namespace std ; // importiert alles aus " std " in den // aktuellen namespace... cout << "... " << endl ;... namespace bar { using std :: cout ; // importiert ein Element in bar }... bar :: cout << "... " << std :: endl ;...

Namespaces (Anwendung) tree.h: baeume.h: class Baum {... }; class Baum {... }; class Knoten {... }; class Eiche {... }; class Blatt {... }; class Buche {... }; namespace Datenstrukturen { # include " tree.h" } namespace Wald { # include " baeume.h" }... Wald :: Baum b; Datenstrukturen :: Baum t;...

Templates I gleiche Grundidee wie Generics I keine Angabe von Typschranken notig oder moglich I Anstelle von Klassen auch Werte und Basisdatentypen als Parameter moglich I Default Parameter template < int rows, int cols = rows, class content = double > class Matrix {... };... Matrix <3,4, int > m; Matrix <3,4 > n; Matrix <3 > o;

Kein super() I Oberklassenkonstruktoren: spezielle Syntax I Methodenaufrufe: explizite Auswahl der Methode class C : public A, public B { C( int a, int b) :A(a), B(b) {} int f () { return A :: f () + B :: f () ; } };

Was ist sonst noch anders? I Kein Reection I Kein dynamisches Laden I assert I Keine Exception, sondern Programmabbruch I Konnen nur beim Compilieren entfernt werden I Exceptions I Alle Objekte, Integers, Zeichenketten,... konnen geworfen werden I Spezikation ist optional I Bei erfolgter Spezikation: I Programmabbruch, wenn falsche Exception geworfen wird I Alternativ: Statt dessen wird std::bad_exception geworfen

Compiler und Linker I Compiler erzeugt aus Quelltext Objekt-File I Objekt-File ist i.a. plattform- und Compiler-abhangig I Linker erzeugt Executable aus Objekt-File(s) I Objekt-File(s) werden in Libraries zusammengefat I Aus dem Objekt-File ist kein Quelltext regenerierbar I Bei Anderung einer Klasse Neukompilation des gesamten benutzten Codes notwendig I Global optimierende Compiler: Objekt-File nur geparster Source-Code

Zusammenfassung I Multiparadigmen-Sprache I Maschinennahe Programmierung moglich I Kompliziert I Viele Moglichkeiten I Viele Moglichkeiten, sich in den Fu zu schieen I Sehr relevant in der Industrie