C++ Teil 10. Sven Groß. 17. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Dez / 14

Ähnliche Dokumente
C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

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

7. Übung Informatik II - Objektorientierte Programmierung

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

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

Rückblick: Benutzerdefinierte Datentypen Definition der Klasse Vektor als Container für 2-dimensionale Vektoren

Informatik 1 MaVt FS Übung 10

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Visuelle Kryptographie. Anwendung von Zufallszahlen

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

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

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

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

Informatik I (D-MAVT)

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Verwendung von Klassen in C++

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.

4. Objektorientierte Programmierung mit C++

Programmieren in C++ Überladen von Methoden und Operatoren

C++ Wiederholung. Sven Groß. 24. Juni Sven Groß (IGPM, RWTH Aachen) C++ Wiederholung 24. Juni / 90

Informationsverarbeitung im Bauwesen

virtual Wertpapier& operator=(const Wertpapier&); // VIRTUELLE ZUWEISUNG protected: static enum {wortfeldlaenge = 20}; char* name_z; double kurs; };

Prinzipien der objektorientierten Programmierung (OOP)

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

Vorkurs Informatik: Erste Schritte der Programmierung mit C++

Vorkurs C++ Programmierung

Programmieren in C/C++ und MATLAB

Einführung in die Programmierung

Prof. W. Henrich Seite 1

Objektorientierte Programmierung

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Objektorientierte Programmierung mit C++ SS 2007

Objektorientierte Programmierung und Klassen

Einstieg in die Informatik mit Java

Objektorientierte Programmierung

4. Objektorientierte Programmierung mit C++

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

Überblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse

Einstieg in die Informatik mit Java

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

Klassen. Kapitel Klassendeklaration

C++ Teil 7. Sven Groß. 3. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 3. Juni / 16

Einstieg in die Informatik mit Java

Dynamische Datentypen

Überblick. Überblick. Abstrakte Klassen - rein virtuelle Funktionen Beispiele

19. Vererbung und Polymorphie

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

Name: Klausur Informatik III WS 2003/04

Repetitorium Informatik (Java)

Statische und Nichtstatische Methoden Properties/ Eigenschaften

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Vorlesung Objektorientierte Programmierung Klausur

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

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

Einstieg in die Informatik mit Java

Pods und Objects (Klassen)

Programmieren für Wirtschaftswissenschaftler SS 2015

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Lösungen Übung 5. Programmieren in C++ 1. Aufgabe. #include <iostream.h> #include <stdarg.h>

Konstruktor/Destruktor

5.5.8 Öffentliche und private Eigenschaften

C++ - Objektorientierte Programmierung Vererbung

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

Technische Infor matik 2 C/C++-Kurs. Datenabstraktion (Klassen) 2005 AG Rechner netze 4.1

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell

Theorie zu Übung 8 Implementierung in Java

Programmieren in Java -Eingangstest-

Kurzeinführung in C/C++ Elementare Datentypen in C++

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

Überblick. 5. Objekt und Klasse, Elementfunktionen

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

Javakurs für Anfänger

Klassen als Datenstrukturen

Aufbau von Klassen. class punkt {...

Überblick. Überblick zum weiteren Inhalt

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

Programmieren - C++ Templates

Objektorientierte Programmierung Studiengang Medieninformatik

3.3 Konstruktoren und Destruktoren

Vererbung und Polymorphie

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

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Grundkurs C++ IDE Klassenhierarchien

Grundzüge der objektorientierten Programmierung

Objektorientierte Programmierung Studiengang Medieninformatik

Grundkurs C++ IDE Klassenhierarchien

Vererbung und Polymorphie

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

3. Exkurs in weitere Arten der Programmierung

Objektorientierung (OO)

Javakurs für Anfänger

Algorithmen und Programmierung II

14. Java Klassen. Klassen (Java) vs. Records (Pascal) Klassen - Konzeptuell. Klassen - Technisch

Mikrorechentechnik II. Klassen in C++

Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache:

Transkript:

C++ Teil 10 Sven Groß IGPM, RWTH Aachen 17. Dez 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 1 / 14

Themen der letzten Vorlesung Objektorientierung und Klassen Attribute / Datenelemente Methoden / Elementfunktionen const-qualifizierung this-zeiger Konstruktoren und Destruktor Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 2 / 14

Heutige Themen 1 Funktionen: Default-Parameter 2 Wdh.: Konstruktor und Destruktor 3 Zugriffskontrolle Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 3 / 14

Default-Parameter Beispiel: Funktion void makecoffee ( int cups, bool withmilk = true, bool withsugar = true ); kann so aufgerufen werden: makecoffee ( 1, false, false ); // 1x schwarz makecoffee ( 2, false ); // 2x mit Zucker makecoffee ( 3); // 3x mit Zucker + Milch Default-Parameter: Funktionsparameter mit Default-Werten können beim Aufruf weggelassen werden, dann mit Default-Werten belegt nur am Ende der Parameterliste: nach Default-Parameter keine normalen Parameter mehr erlaubt auch bei Methoden und Konstruktoren möglich Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 4 / 14

Wdh.: Konstruktor wird beim Erzeugen eines Objektes automatisch aufgerufen Zweck: initialisiert Attribute des neuen Objektes Klasse kann mehrere Konstruktoren haben: Default-Konstruktor Student() {... } Kopierkonstruktor Student( const Student& s) {... } darüber hinaus weitere, allgemeine Konstruktoren möglich, z.b. Student (string name, int matnr, double note= 5.0) {... } Student a; // per Default - Konstruktor Student b( " Hans Schlau ", 234567, 1.3); Student c( b); // per Kopierkonstruktor Kein Wertparameter beim Kopierkonstruktor! Student( Student s); //nicht erlaubt Call by value würde eine Kopie s erzeugen, für die der Kopierkonstruktor benötigt wird. Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 5 / 14

Student :: Student ( string name, int matnr, double note = 5.0) { // weiterer Konstruktor Name = name ; MatNr = matnr ; Note = note ; } Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 6 / 14 Konstruktor Beispiel class Student {... public : Student (); Student ( string name, int matnr, double note = 5.0); Student ( const Student &); }; Student :: Student () { // Default - Konstruktor Name =" Max Mustermann "; MatNr = 0; Note = 5.0; } Student :: Student ( const Student & s) { // Kopier - Konstruktor Name = s. Name ; MatNr = s. MatNr ; Note = s. Note ; }

Objekte erzeugen durch verschiedene Konstruktoren Student alice, // Default - Konstruktor bob ( " Bob Meier ", 123456, 2.3), chris ( " Chris Schmitz ", 333333); Student lisa ( alice ); // Kopierkonstruktor Student bobby = bob ; // Kopierkonstruktor Student bobby( bob); bzw. Student bobby= bob; synonyme Syntax Kopierkonstruktor Student alice; Default-Konstruktor Student alice(); keine gültige Syntax für Default-Konstruktor-Aufruf (verwechselbar mit Funktionsdeklaration!) Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 7 / 14

Destruktor wird automatisch beim Vernichten eines Objektes aufgerufen Zweck: z.b. Speicher eines dynamischen Feldes wieder freigeben jede Klasse hat genau einen Destruktor ~Student () {... } wird kein Destruktor deklariert, so gibt es immer einen impliziten Destruktor, der nichts tut (wie ~Student() {}) Ebenso gibt es in jeder Klasse auch einen impliziten Default-Konstruktor (falls keine Konstruktoren deklariert werden) Kopierkonstruktor Zuweisungsoperator operator= class Array { double * feld ; public : Array ( int laenge ) { feld = new double [ laenge ]; } ~ Array () { delete [] feld ; } }; // Problem : impliziter Kop. konstr. und operator = ungeeignet Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 8 / 14

Zugriffskontrolle private-bereich: Zugriff nur durch Methoden derselben Klasse public-bereich: Zugriff uneingeschränkt über Objekt möglich class Student { private : string Name ; // Attribute int MatNr ; double Note ; public : // Konstruktor Student ( string Name, double Note, int MatNr ); // Destruktor ~ Student (); }; bool hat_ bestanden () const ; // Methoden void berechne_ Note ( int Punkte ); Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 9 / 14

Zugriffskontrolle: Klassen vs. Strukturen public-/private-bereiche auch in Strukturen möglich einziger Unterschied: Default-Verhalten, wenn nichts angegeben Strukturen: standardmäßig public Klassen: standardmäßig private für objektorientierte Programmierung werden i.d.r. Klassen verwendet struct Datum { int Tag, Monat, Jahr ; // alles public private : double geheim ; }; class Date { int Day, Month, Year ; // alles private public : int GetMonth () const ; void SetMonth ( int month ); }; Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 10 / 14

Vorteile der Zugriffskontrolle private-bereich: Zugriff nur durch Methoden derselben Klasse in der Regel für Attribute einer Klasse Attribute sollen vor willkürlichem Zugriff geschützt werden Zugriff auf private Attribute nur über public-methoden der Klasse möglich public-bereich: Zugriff uneingeschränkt über Objekt möglich in der Regel für Methoden einer Klasse ermöglicht Arbeiten mit einer Klasse über wohldefinierte Schnittstelle Vorteile objektorientierter Programmierung: Datenkapselung: für den Nutzer einer Klasse tritt deren interne Arbeitsweise in den Hintergrund einfache Wartung: private Interna der Klasse können ausgetauscht werden ohne Auswirkung auf den Nutzer Wiederverwendbarkeit durch wohldefinierte öffentliche Schnittstelle Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 11 / 14

Beispiel zu Datenkapselung / Wartung Beispiel: Klasse für komplexe Zahlen class Complex { private : // private Interna double Re, Im; // Real - und Imaginaerteil public : // oeffentliche Schnittstelle Complex ( double re =0, double im =0) // Konstruktor { Re= re; Im= im; } double GetReal () const { return Re; } double GetImag () const { return Im; } double GetAbs () const ; // Betrag double GetPhi () const ; // Winkel }; void SetCartesian ( double re, double im) { Re= re; Im= im; } void SetPolar ( double abs, double phi ) { Re= abs * cos ( phi ); Im= abs * sin ( phi ); } Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 12 / 14

Beispiel (2): Anwender-Code mit Complex Klasse Complex + Operatorüberladung für operator + - * / << >> Neuer Datentyp Benutzer kann Code wie diesen schreiben: Complex x, // = 0 + 0 i = 0 y( 2.4), // = 2.4 + 0 i = 2.4 z( 0, 1); // = 0 + 1 i = i x= y* z - z; double winkel = x. GetPhi (); z. SetPolar ( 2, winkel ); cout << " z = " << z << endl ; öffentliche Schnittstelle erlaubt sowohl kartesische Darstellung (Real-/Imag.teil) als auch Polarkoordinaten-Darstellung intere Realisierung verborgen (private-bereich, Implementierung der Methoden) kann auch komplett ausgetauscht werden, ohne Auswirkung auf Benutzer der Klasse, solange Schnittstelle gleich bleibt Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 13 / 14

Klasse nach Austausch der internen Attribute Austausch der Interna bei unveränderter Schnittstelle nach außen hin ändert sich nichts, Anwender-Code bleibt gleich! class Complex { private : // private Interna ( ausgetauscht ) double Abs, Phi ; // Polarkoordinaten public : // oeffentliche Schnittstelle wie vorher Complex ( double re =0, double im =0) // Konstruktor { SetCartesian ( re, im ); } double GetReal () const { return Abs * cos ( Phi ); } double GetImag () const { return Abs * sin ( Phi ); } double GetAbs () const { return Abs ; } double GetPhi () const { return Phi ; } }; void SetCartesian ( double re, double im ); void SetPolar ( double abs, double phi ) { Abs = abs ; Phi = phi ; } Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 14 / 14