Vorkurs C++ Programmierung



Ähnliche Dokumente
Objektorientierte Programmierung

Java Kurs für Anfänger Einheit 5 Methoden

Programmieren in Java

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

Zählen von Objekten einer bestimmten Klasse

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

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

Java: Vererbung. Teil 3: super()

3 Objektorientierte Konzepte in Java

Einführung in die Java- Programmierung

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

Objektorientierte Programmierung für Anfänger am Beispiel PHP

5. Abstrakte Klassen

Einführung in die Programmierung

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

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Objektorientierte Programmierung OOP

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Einführung in die Java- Programmierung

Programmieren Tutorium

Alltagsnotizen eines Softwareentwicklers

Javakurs 2013 Objektorientierung

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

Java Virtual Machine (JVM) Bytecode

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

Objektorientierung: Klassen und Objekte

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Software Engineering Klassendiagramme Einführung

Grundlagen von Python

Computeranwendung und Programmierung (CuP)

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

Einführung in die Programmierung

Objektbasierte Entwicklung

Objektorientierte Programmierung. Kapitel 12: Interfaces

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

Objektorientierte Programmierung

Einführung in die Programmierung für Wirtschaftsinformatik

Delegatesund Ereignisse

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Client-Server-Beziehungen

Objektorientierte Programmierung mit C++ Vector und List

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Studentische Lösung zum Übungsblatt Nr. 7

Klassendefinitionen verstehen

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Professionelle Seminare im Bereich MS-Office

Vererbung & Schnittstellen in C#

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

3 Objektorientierte Konzepte in Java

Objektorientierte Programmierung

Große Übung Praktische Informatik 1

5.4 Klassen und Objekte

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

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

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

Selbststudium OOP4 Auftrag

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Prinzipien Objektorientierter Programmierung

Programmierkurs Java

C/C++-Programmierung

Deklarationen in C. Prof. Dr. Margarita Esponda

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

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

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

Software Engineering Interaktionsdiagramme

C++ - Einführung in die Programmiersprache Objektorientierte Programmierung

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

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

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

Einführung in die Programmierung (EPR)

Die Programmiersprache C99: Zusammenfassung

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

Grundlagen. Kapitel 1

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

Leichte-Sprache-Bilder

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

Outlook Vorlagen/Templates

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

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

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Informatik für Schüler, Foliensatz 21 Objektorientierte Programmierung

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

2. Programmierung in C

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Kapitel 6. Vererbung

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Modellierung und Programmierung 1

Java Einführung Methoden in Klassen

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmierkurs Java

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

Operationalisierbare Qualitätskriterien für die Programmierung mit Erfahrungen aus PRÜ1 und PRÜ2

Selbstbestimmtes Lernen. Proinformatik III Objektorientierte Programmierung. Format. Inhalt. Buzzwords

Objektorientiertes Programmieren für Ingenieure

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

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

Transkript:

Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen: auto, static, const static und const können noch viel mehr Konstanten const und #define 2 Heute: Klassen Klassen sind das zentrale Konzept der Objektorientierten Programmierung (OOP) Zur OOP gehört noch viel mehr... Stichworte: Vererbung und Polymorphismus Vollständige OOP erst in der Vorlesung EI-2 Hier: Klassen als Zusammenfassung logisch zusammengehöriger Variablen und Funktionen in einem eigenen Datentyp Klassen Eine Klasse ist eine Schablone, mit welcher sich konkrete Instanzen ( Objekte ) erzeugen lassen. Analog: Einfacher Datentyp int Variable int zahl = 17; Beispiel: Definition einer Klasse Rechteck Welche Eigenschaften hat ein Rechteck? (= Attribute) Was soll ein Rechteck können? (= Funktionen) Attribute: Länge und Breite Funktionen: Umfang berechnen, Flächeninhalt berechnen, gezeichnet werden 3 4

Klassen Beispiel: Klasse Rechteck : Attribute: Länge und Breite Funktionen: Fläche und Umfang berechnen, zeichnen 5 Rechteck Länge Breite berechnefläche berechneumfang zeichnerechteck Klassendefinition Objekte rechteck1 Länge: 3 Breite: 4 rechteck2 Länge: 6 Breite: 1 rechteck4 Länge: 9 Breite: 5 rechteck3 Länge: 2 Breite: 6 4 verschiedene Objekte (auch: Instanzen ) der Klasse Rechteck mit unterschiedlichen Attributwerten. Vorschau... Rechteck *rechteck1 = new Rechteck(3.0,4.0); float fflaeche1 = rechteck1->berechneflaeche(); Rechteck *rechteck2 = new Rechteck(2.0,3.0); 6 Hier steht die Definition von Rechteck drin! Konstruktor, dem man Werte für die Länge und die Breite als Parameter übergeben kann new liefert einen Pointer auf ein Objekt! float fflaeche2 = rechteck2->berechneflaeche(); Aufruf der Funktion if(fflaeche1 < fflaeche2) berechneflaeche(), std::cout << "Rechteck2 ist groesser"; die wir für die Klasse definiert haben. else if(fflaeche1 > fflaeche2) std::cout << "Rechteck1 ist groesser"; else std::cout << "Die Rechtecke sind gleich gross"; Definition eigener Klassen Wie definiert man eine Klasse? Üblich: Trennung von Deklarationen und Implementierung Header-Datei (Endung:.h) und Implementierung (.cpp) Deklarationen (Header-Datei): Namen und Typen von Attributen (ohne Werte, da die Werte ja den Objekten zu Eigen sind) Signaturen der Funktionen (ohne Rumpf!), des Konstruktors und Destruktors Implementierung (.cpp-datei): Konstruktor, Destruktor und Funktionen mit Rumpf Hier steht drin, was wirklich passiert Vorteile der Trennung: Verbergen der Details, mehr Übersicht 7 Klassendeklaration: Header-Datei 8 ; Semikolon! Klassenname: class Klassenname... ; Konstruktor: Klassenname(); oder Klassenname(Parameterliste); Destruktor: ~Klassenname(); Funktionssignaturen: Returnwert Funktionsname(Parameterliste); Attribute (Eigenschaften), auch Membervariablen : Typ m_tattributname; (Konvention)

Klassendeklaration: Header-Datei 9 ; public und private sind Schlüsselwörter, die die Sichtbarkeit von Attributen und Funktionen festlegen. 10 ; //Datei Rechteck.cpp Bindet die Klassendefinition ein m_flaenge = fl; m_fbreite = fb; //Speicher //freigeben 11 ; //Datei Rechteck.cpp Konstruktor: m_flaenge = fl; Initialisierung des zu m_fbreite = fb; erzeugenden Objekts mit new Destruktor: //Speicher Löschen eines Objekts //freigeben mit delete 12 ; //Datei Rechteck.cpp :: definiert (u.a.) die m_flaenge = fl; Zugehörigkeit einer Funktion zu einer m_fbreite = fb; Klasse //Speicher freigeben

Konstruktor Bauanleitung für Objekte der Klasse //.cpp-datei m_flaenge = fl; m_fbreite = fb; hat immer den Namen der Klasse hat keinen Rückgabewert wird mit new aufgerufen braucht keine Parameter ( Standardkonstruktor ): //.cpp-datei Rechteck::Rechteck()...würde reichen. Destruktor //cpp-datei //Speicher freigeben Wird mit delete aufgerufen Wird in der Klasse Speicher alloziert, muss er spätestens hier wieder freigegeben werden. wird das Objekt der Klasse gelöscht, wird auch der Speicher gelöscht, den es belegt hat. keine memory leaks! 13 14 Erzeugung von Objekten (auf dem Heap) ; //Datei Rechteck.cpp...... //Funktionen float Rechteck::berechneUmfang() return 2 * (m_flaenge + m_fbreite); float Rechteck::berechneFlaeche() return m_flaenge * m_fbreite; Rechteck *erstesrechteck = new Rechteck(3.0, 4.0); float fflaeche = erstesrechteck->berechneflaeche(); std::cout << nflaeche; delete erstesrechteck; erstesrechteck = NULL; 1. (Pointer auf) Objekt erzeugen: new Konstruktor(params); 2. Funktion mit -> aufrufen (nur bei Pointertyp) 15 16

Erzeugung von Objekten (auf dem Heap) Erzeugung von Objekten (auf dem Stack) Rechteck *erstesrechteck = new Rechteck(3.0, 4.0); float fflaeche = erstesrechteck->berechneflaeche(); std::cout << nflaeche; delete erstesrechteck; erstesrechteck = NULL; Wenn das Objekt nicht mehr gebraucht wird, Pointer löschen! delete ruft den Destruktor der Klasse auf. Rechteck erstesrechteck(4.0,2.0); float fflaeche = erstesrechteck.berechneflaeche(); std::cout << fflaeche; Bei einem echten Objekt und bei Referenzen wird mit dem Punktoperator (.) auf Funktionen und Attribute zugegriffen. 17 18 Objekte als Parameter übergeben Beispiel: Vergleich zweier Rechtecke Deklarieren einer Funktion bool isbigger(rechteck *r); in Rechteck.h Funktion nimmt einen Pointer auf ein Rechteck entgegen Call by Value/Reference: Kopieraufwand, Änderungen nach außen! Implementierung in Rechteck.cpp: 19 bool Rechteck::isBigger(Rechteck *r) if(this->getflaeche() > r->getflaeche()) return true; else return false; //gibt 1 aus //gibt 0 aus this liefert immer einen Pointer auf das aufrufende Objekt Objekte als Parameter übergeben bool Rechteck::isBigger(Rechteck *r) if(this->getflaeche() > r->getflaeche()) return true; //gibt 1 aus else return false; //gibt 0 aus Aufruf der Funktion an anderer Stelle (z.b. main.cpp): Rechteck *r1 = new Rechteck(3.9, 2.6); Rechteck *r2 = new Rechteck(1.0, 2.0); 20 bool b = r1->isbigger(r2); std::cout << b; Hier wird nur ein Pointer übergeben! Es müssen keine Daten kopiert werden!

Objekte als Parameter übergeben Übersicht Parameterübergabe... Jetzt mit Referenz: Implementierung in Rechteck.cpp: bool Rechteck::isBigger(Rechteck &r) if(this->getflaeche() > r.getflaeche()) return true; //gibt 1 aus else return false; //gibt 0 aus Geg.: Pointer *p Geg.: Referenz &r Geg.: Objekt o Eine Funktion verlangt......einen Pointer: void function(t *param) function(p) function(&r) &: Adressoperator Liefert die Adresse. function(&o) &: Adressoperator Liefert die Adresse....eine Referenz: void function(t &param) function(*p) *: Dereferenzierung Liefert den Inhalt. function(r) function(o)...ein Objekt: void function(t param) function(*p) *: Dereferenzierung Liefert den Inhalt. function(r) function(o) 21 22 Call-by-Reference: function ändert die übergebenen Daten. Call-by-Value: function kriegt nur eine Kopie. Änderungen nur lokal. Objekte als Rückgabewert von Funktionen Objekte können wie einfache Datentypen Rückgabewert von Funktionen sein Hier sollte man ebenfalls Pointer und Referenzen benutzen! //Funktion liefert einen Pointer auf das größte Rechteck Rechteck* getbiggestrectangle(rechteck *r1, Rechteck *r2) if(r1->berechneflaeche() > r2->berechneflaeche()) return r1; else return r2; Aufruf durch: Rechteck *prechteck1 = new Rechteck(3.0, 4.0); Rechteck *prechteck2 = new Rechteck(5.0, 6.0); std::cout << getbiggestrectangle(prechteck1, prechteck2)->getflaeche(); Zusammenfassung Klassen: Zentrales Konzept der OOP Zusammenfassung/Kapselung von Daten und Funktionen Schablone zur Erzeugung konkreter Instanzen (Objekte) Trennung von Deklaration (Header-Datei,.h) und Implementierung (.cpp-datei) Einbinden mit dem #include-befehl Konstruktor, Destruktor Standardkonstruktor Übergabe von Objekten (Referenzen/Pointern) als Parameter Objekte als Rückgabewerte von Funktionen 23 Pointer auf das größere von beiden Rechtecken 24