Crashkurs C++ Wiederholung

Ähnliche Dokumente
A practical guide to C++

Implementieren von Klassen

7. Übung Informatik II - Objektorientierte Programmierung

Einführung in die Programmiersprache C

Klassen. C++ Übung am 02. Juni 2016

Repetitorium Programmieren I + II

OOP und Angewandte Mathematik (Praktikum 1) Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

Einführung in die Programmiersprache C

Klassen. Kapitel Klassendeklaration

9 Programmieren von Klassen

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

Programmierung und Angewandte Mathematik

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

Algorithmen und Datenstrukturen

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

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Vorlesungsprüfung Programmiersprache 1

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

Ursprünge. Die Syntax von Java. Das Wichtigste in Kürze. Konsequenzen. Weiteres Vorgehen. Rund um Java

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

C++ - Objektorientierte Programmierung Polymorphie

Überblick. R.Grossmann / P. Sobe 1

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

Programmierkurs. Steffen Müthing. November 30, Interdisciplinary Center for Scientific Computing, Heidelberg University

Visuelle Kryptographie. Anwendung von Zufallszahlen

Die Syntax von Java. Ursprünge. Konsequenzen. Das Wichtigste in Kürze. Weiteres Vorgehen. Rund um Java. Sun Microsystems. Borland Software Corp

Informatik I (D-ITET)

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Einführung in die Programmierung mit C++

Informatik 1 ( ) D-MAVT F2011. Klassen, Funktionen. Yves Brise Übungsstunde 9

Programmieren in C++

Angewandte Mathematik und Programmierung

C++ Klassen weitere Funktionen

Objektorientierte Programmierung

Lösung der OOP-Prüfung WS12/13

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

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

Programmierkurs C/C++

OOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik

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

Grundlagen der Informatik 12. Strukturen

Programmieren in C++ Klassen

Objektorientierte Programmierung mit C++ SS 2007

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Unterlagen. CPP-Uebungen-08/

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

Repetitorium Programmieren I + II

3. Exkurs in weitere Arten der Programmierung

Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1

Programmierkurs C/C++

Dynamische Datenstrukturen in C++ 150

Einführung in die Programmierung Wintersemester 2018/19

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

Konstruktor/Destruktor

Ein paar Kleinigkeiten zum Einstieg

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Aufbau von Klassen. class punkt {...

Algorithmen zur Datenanalyse in C++

Herzlich willkommen!

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

Überblick. 5. Objekt und Klasse, Elementfunktionen

Dynamische Datentypen

Inhalte der Grundlagen

Objektorientierte Programmierung mit C++

Informatik I (D-ITET)

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

Objekte und Klassen. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E.

Informatik I (D-ITET)

Vorkurs C++ Programmierung

Einführung in die Programmierung für NF MI. Übung 07

4 Generische Programmierung. 4.1 Klassen-Templates (*) 4.2 Funktions-Templates (*) 4.3 Besondere Programmiertechniken (Smart Pointer)

Einstieg in die Informatik mit Java

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

Variablen und Parameter

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

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

Programmierung und Angewandte Mathematik

Programmieren in C++ Templates

1 Klassen und Objekte

Grundkurs C++ IDE Klassenhierarchien

Algorithmen und Datenstrukturen

Teil 2: Weitere Aspekte der Objektorientierung

3 Klassen, Attribute, Methoden

3 Klassen, Attribute, Methoden

Programmieren in Java -Eingangstest-

Grundkurs C++ IDE Klassenhierarchien

Coding Conventions. for C++ Reto Carrara Gyrenstrasse 17 CH-8967 Widen +4179/

Grundlagen. Felix Döring, Felix Wittwer 24. April Python-Kurs

Objektorientierte Programmierung mit C++ den sog. default constructor X (){}

Hydroinformatik I: Klassen

Prinzipien der objektorientierten Programmierung (OOP)

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

Verwendung von Klassen in C++

Das Interface-Konzept am Beispiel der Sprache Java

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

Einführung in die Programmiersprache Java II

Grundkurs C++ IDE Klassenhierarchien

Algorithmen und Datenstrukturen II

Transkript:

Crashkurs C++ Wiederholung #include <iostream> int main(void) { int i, j; bool is_prime; for (j = 1; j < 1000; j += 2) { is_prime = true; for (i = 3; i <= j/2; i += 2) if (!(j%i)) is_prime = false; if (is_prime) cout << j << endl; C++ ist verwandt zu Java. Zusätzlich gibt es (u. a.): Die Trennung Deklaration/Definition Einen Präprozessor (#-Anweisungen) C++ ist nicht zwingend objektorientiert. Das C++-Hauptprogramm ist die Routine main. Pointer Dagegen fehlen in C++ z. B.: Garbage Collection Exception-Behandlung c 2001 Jens Teubner, Universität Konstanz 1

Deklaration/Definition, Header-Files bibliothek.cc Definition/Implement. bibliothek.h Deklaration bibliothek.o Object File #include "bibliothek.h" int main(void) { //Aufruf der Bibliothek myfunction(42); return 0; programm.cc programm.cc Unser Programm programm.o Object File programm Executable Compiler Linker Deklaration und Definition können getrennt werden. Deklaration üblicherweise in getrennter Datei (Header-Datei mit Endung.h) Dadurch kann von mehreren Quell-Programmen auf einen Programmteil zugegriffen werden. c 2001 Jens Teubner, Universität Konstanz 2

Weiteres zum Präprozessor bibliothek.h // Avoid including this file twice #ifndef BIBLIOTHEK_H #define BIBLIOTHEK_H #define MYMACRO 42 // Function declaration void myfunction(int); #endif bibliothek.cc #include "bibliothek.h" // Function definition void myfunction(int a) {...do something useful... Deklaration und Definition können in C++ getrennt werden. Der Präprozessor macht reines Text- Einfügen/Ersetzen. Dies kann insbesondere mit #define zu unerwünschten Ergebnissen führen (s. Übung) In der Regel darf Code nicht mehrfach eingelesen werden. Absichern mit #ifndef wie im Beispiel #include "datei" sucht im aktuellen Pfad, #include <datei> sucht in den System-Pfaden (für Standard-Bibliotheken). c 2001 Jens Teubner, Universität Konstanz 3

Pointer int a; Var.: bar int &b = a; Typ: int* int *bar; bar = &a; Var.: a / b *bar = 42; // a is now 42 Var.: foo Typ: int struct s baz; Typ: struct s* struct s *foo; foo = &baz; Zeiger "tatsächliche" Variablen Var.: Typ: baz struct s & Deklaration für Ein anderer Name für, erfordert Initialisierung * Deklaration für Pointer auf & Adress-Operator * Inhalt, auf den der Pointer zeigt Ansprechen mit baz.membervar, wenn baz eine echte Variable ist Ansprechen mit foo->membervar, wenn foo ein Pointer auf einen struct ist c 2001 Jens Teubner, Universität Konstanz 4

Anwendung von Pointern In Java sind alle Variablen Pointer Teilweise effizienter, weil weniger Daten im Speicher bewegt werden müssen. Notwendig, wenn Funktionen auf externe Daten zugreifen sollen. Beispiel: Implementation eines Baums struct treeelement { // Our int ; // Pointer to parent element struct treeelement *parent; ; c 2001 Jens Teubner, Universität Konstanz 5

Objektorientiertes Programmieren mit C++ Einführung struct account { // member variables int balance; int limit; // member functions bool deposit(int amount); bool withdraw(int amount); ; bool account::deposit(int amount) {...do something... return true; // successful Objektorientierte Funktionalitäten durch Erweitern der Vorgängersprache C. Ergänzung von Datenstrukturen durch zugehörige Funktionen Interne Datenrepräsentation nach außen nicht sichtbar/irrelevant. Kontrolle der Operationen auf den Daten, z. B. um Unterschreiten des Kontolimits zu unterbinden. Probleme bislang: Zugriff auf Member-Variablen immer noch möglich. Initialisierung der Daten. c 2001 Jens Teubner, Universität Konstanz 6

Zugriffskontrolle, Konstruktor/Destruktor class account { private: int amount; public: account(int); //constructor ~account(void); //destructor bool deposit(int amount); ; account::account(int init_amount) {...do something... account::~account(void) {...clean up... Zugriffskontrolle durch Schlüsselworte private und public (protected) private deklarierte Variablen und Funktionen sind nach außen nicht sichtbar. struct hat public als Standard, class hat private. Konstruktor wird beim Deklarieren eines Objekts aufgerufen. Er kann überladen werden. Der Destruktor wird beim Verlassen des Scope aufgerufen und hat keine Parameter. c 2001 Jens Teubner, Universität Konstanz 7

Nochmal: Header-Files myclass.h class myclass { // This is the private: // definition only! int a; public: int myfunc(int); ; #include "myclass.h" myclass.cc int myclass::myfunc(int foo) { return 42; myprog.cc #include <iostream> #include "myclass.h" int main(void) { myclass myclassvar; cout << myclass.myfunc(42); return 0; So wird kompiliert g++ -Wall -g -c -o myclass.o myclass.cc g++ -Wall -g -c -o myprog.o myprog.cc g++ -Wall -g -o myprog myclass.o myprog.o Die gesamte Klassen-Deklaration kommt in die Header-Datei. Die Definition (d. h. die eigentliche Implementierung) kommt in die.cc-datei. Die Header-Datei kann jetzt von mehreren Programmteilen eingebunden werden. c 2001 Jens Teubner, Universität Konstanz 8

Das Schlüsselwort static void err_msg(char *msg) { static int msgno = 1; cerr << "Error " << msgno++ << ": " << msg << endl; static int foo::bar(void) {...do something... return 42; static float do_something(void) {...do something... static hat mehrere komplett verschiedene Bedeutungen. static-variablen bleiben auch nach Durchlaufen einer Funktion erhalten. Die Initialisierung wird nur einmal durchlaufen. static-member-variablen sind damit vergleichbar. Sie sind nicht an eine Klassen-Instanz gebunden. Für static-member-funktionen gilt das selbe. static-(nicht-member-)funktionen sind nur innerhalb eines Object-Files sichtbar. c 2001 Jens Teubner, Universität Konstanz 9

Das Schlüsselwort const const int abc = 12; class myclass { public: const bar; static const foo = 42; enum { def = 13 ; myclass(int); const int &getptr(int); int getsize(void) const; myclass::myclass(int a) : bar(a) {...do something... Member-Variablen können konstant sein Für die Laufzeit eines Objekts Für alle Instanzen der Klasse Entsprechend unterschiedliche Deklaration/Initialisierung. enum als Trick, um Konstanten zu definieren. const vor Funktionsname heißt Rückgabewert darf nicht links von einer Zuweisung stehen. const nach Funktionsname heißt Funktion darf auch für ein const-objekt verwendet werden. c 2001 Jens Teubner, Universität Konstanz 10

Überladen von Operatoren in C++ C++ bietet noch weitere Möglichkeiten beim Umgang mit Objekten: Die Wirkung von Operatoren wie z. B. +, - auf Objekte kann durch das Überladen von Operatoren verändert/definiert werden, z. B.: complex operator +(complex a, complex b) { return complex( a.real() + b.real(), a.imag() + b.imag() ); Der Copy-Konstruktor für Zuweisung von Klassenvariablen oder beim Funktionsaufruf. complex::complex( const complex &old ) { real_val = old.real_val ; imag_val = old.imag_val; Der automatisch generierte Copy-Konstruktor kopiert einfach alle Member-Variablen. c 2001 Jens Teubner, Universität Konstanz 11