Aufbau von Klassen. class punkt {...

Ähnliche Dokumente
C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

7. Übung Informatik II - Objektorientierte Programmierung

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Implementieren von Klassen

Javakurs für Anfänger

Teil 2: Weitere Aspekte der Objektorientierung

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

Einführung in die Programmierung Wintersemester 2018/19

C++ Klassen weitere Funktionen

Klassen. Kapitel Klassendeklaration

Einführung in die Programmierung mit C++

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

Programmierung III. Pointer für Fortgeschrittene Marc Ruberg. Arrays von Pointern ( Zeigervektoren ): Pointer auf Pointer:

Programmieren in C/C++ und MATLAB

3. Exkurs in weitere Arten der Programmierung

Algorithmen und Datenstrukturen 06

Fragen zur OOP in Java

Vererbung und Polymorphie

Programmierkurs C/C++

Objektorientierung. Marc Satkowski 20. November C# Kurs

Kap. 11 Objektorientierung: ein Beispiel

3.3 Konstruktoren und Destruktoren

C++ - Objektorientierte Programmierung Vererbung

Überblick. R.Grossmann / P. Sobe 1

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

Prof. W. Henrich Seite 1

Programmiertechnik Klassenvariablen & Instantiierung

Hydroinformatik I: Klassen

Einstieg in die Informatik mit Java

Java für Bauingenieure

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

3 Klassen, Attribute, Methoden

Themen. Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren

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

C++ - Objektorientierte Programmierung Polymorphie

7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor

Die verschiedenen Programmierparadigmen von C++ Software-Technik: Vom Programmierer zur erfolgreichen

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

Vorlesung Datenstrukturen

Umsetzung einer Klassenkarte in einer Programmiersprache

Java Einführung Methoden. Kapitel 6

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

Programmierung Nachklausurtutorium

Mapra: C++ Teil 6. Felix Gruber, Sven Groß. IGPM, RWTH Aachen. 13. Juni 2017

Überblick. 5. Objekt und Klasse, Elementfunktionen

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Einführung in die Programmierung

Erste Java-Programme (Scopes und Rekursion)

7. Objektorientierung. Informatik II für Verkehrsingenieure

Tag 8 Repetitorium Informatik (Java)

1 Klassen und Objekte

Java Vererbung. Inhalt

Hydroinformatik I - WiSe 2018/2019 V5: Klassen

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

Programmierkurs C++ Konstruktor, Statische Methoden Namespaces

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

Konstruktor/Destruktor

Klassen können bekanntlich aus zwei Komponententypen bestehen, nämlich Attributen und Methoden.

Einstieg in die Informatik mit Java

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Einstieg in die Informatik mit Java

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

Propädeutikum Programmierung in der Bioinformatik

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

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

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

Repetitorium Informatik (Java)

Allgemeines - Prinzipien

Objektorientierte Programmierung und Klassen

Mikrorechentechnik II. Klassen in C++

4. Objektorientierte Programmierung mit C++

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

HSR Rapperswil 2001 Markus Rigling. Programmieren: Smart Pointer Auflage

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

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

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Objektorientierte Programmierung mit C++ SS 2007

Objektorientierte Programmierung

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Globale Variablen Diverses. Globale Variablen. Globale Variablen

AuD-Tafelübung T-B5b

Prozeduren vs. Funktionen

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

Prinzipien der objektorientierten Programmierung (OOP)

Programmieren in C++ Templates

Hydroinformatik I: Klassen

Crashkurs C++ Wiederholung

Programmieren in Java

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

Programmieren 1 08 Objekte und Interfaces

Programmieren in Java

Praktische Informatik 1

Grundelemente objektorientierter Sprachen (1)

Methoden und Wrapperklassen

3. Klassen Statische Komponenten einer Klasse. Klassenvariablen

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

Javakurs für Anfänger

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

Transkript:

Einführung in C++

Aufbau von Klassen Eine wird mit dem Schlüsselwort class eingeleitet, und endet mit einem Semikolon. Der Inhalt wird zwischen geschweiften Klammern geschrieben. class punkt {... ; Im Gegensatz zu Datenstrukturen, welche nur Daten enthalten, können Klassen Daten und Funktionen als Elemente enthalten. Der Oberbegriff für Daten und Funktionen ist Member. Man unterscheidet: Daten-Member (Attribute) Funktions-Member (Methoden)

Attribute Basteln wir nun an der Klasse punkt weiter. Früher sah eine passende Datenstruktur wie folgt aus: struct punkt { ; Sie enthält zwei Werte Beispielsweise, Koordinaten. Zur Klasse ist es nun ein kleiner Schritt: class punkt { public: ; Schon existiert eine Klasse, welche wie eine Datenstruktur gehandhabt werden kann. Der Zugriff erfolgt weiterhin über den Punktoperator. : punkt p; p.x = 0;

Attribute II Unter Verwendung von struct oder public nun aber jeder (bewusst oder unbewusst) die Daten ändern. Dies ist oft unerwünscht, bzw. soll nicht erlaubt sein. Verhindert werden kann dies, indem die Daten in einem privaten Bereich abgelegt werden: private: Bei einem Zugriff mittels: p.x = 200; p.y = 20; erzeugt der Compiler einen Fehler. Somit können wir die Daten immer egal was das Programm damit anstellt - in einem definierten Zustand halten.

Methoden I Um kontrollierten Zugriff auf die Attribute zu gewähren gibt es Funktionsmember (Methoden) Nur sie haben uneingeschränkten Zugriff auf alle Daten ihrer Klasse. Diese Member-Funktionen liegen im öffentlichen Teil der Klasse, damit sie jeder verwenden kann: class punkt { private: public: short get_x() { return (x); short get y() { return (y); ; Hier wurde Funktionen in der Klasse Deklariert als auch ihren Code direkt angegeben. (Für getter- und setter-methoden oft üblich)

Methoden II Zum schreiben der Daten kann die Klasse erweitert werden: class punkt { private: public: short get_x() { return (x); short get y() { return (y); void set(short sx, sy) { x = sx; y = sy; ; Nun ist es möglich, den Punkt zu instantiieren und über die internen Methoden die Koordinatenpunkte zu verändern: int main () { int x = 1; Punkt P; P.set(x, 5); P.set(P.get_x(), 123); return(0);

Methoden III Bei umfangreichen Methoden ist es allerdings sinnvoll, Deklaration und Implementierung zu trennen. Dazu wird die Methode innerhalb der Klasse deklariert und außerhalb implementiert: class punkt { private: public: short get_x() { return (x); short get y() { return (y); void set(short sx, sy) { x = sx; y = sy; void zeichne(); ;

Methoden IV Bei der Implementierung der Methode muss der Klassenname in der Form punkt::zeichne vorangestellt werden. (andere Klassen könnten ja Funktionen unter gleichem Namen haben) punkt::zeichne () { cout << Eingegebene Punkte: << x << << y << endl; Im Folgenden wird ein Punkt nun angelegt, und ausgegeben: int main() { punkt P; P.set(200,300); P.zeichne(); return(0);

Konstruktor Gewöhnlich sollten Attribute nur über ihre getter- und setter-methoden zugänglich sein. Hierüber erfolgt auch ihre erstmalige Belegung. Um zu verhindern, dass beim Instantiieren eines Objektes ein undefinierter Zustand auftritt, gibt es sog. Konstruktoren. class punkt { private: public: punkt() { x = 0; y = 0; // parameterloser Konstruktor punkt(short sx, short sy) { set(sx, sy); short get_x() { return (x); short get y() { return (y); void set(short sx, sy) { x = sx; y = sy; void zeichne(); ;

Konstruktor Konstruktoren haben den selben Namen wie ihre Klasse, und werden automatisch beim instantiieren aufgerufen. Eine Klasse kann einen, keinen oder auch mehrere Konstruktoren haben. Gibt es mehrere Konstruktoren, so müssen sich diese anhand der Parametersignatur (Anzahl der Variablen oder/und Typ der Variablen) unterscheiden. Im Konstruktor werden dann alle notwendigen Initialisierungen durchgeführt. Das Anwendungsprogramm darf diesen Prozess allenfalls Parametrisieren.

Destruktor Neben einem Konstruktor kann eine Klasse einen (und nur einen!) Destruktor haben. Er ist parameterlose Funktion, die wie der Konstruktor keinen Rückgabewert haben. Als Name dient der Klassennamen, mit einer vorangestellten Tilde ~ Er dient dazu, zur Beseitigung des Objekts anfallende Aufräumarbeiten zu erledigen (Speicherfreigabe) class punkt { private: public: punkt() { x = 0; y = 0;... ; void zeichne(); ~punkt(); // Destruktor

Überladen von Funktionen Darunter versteht man, dass durchaus Funktionen mit gleichem Namen existieren dürfen, sofern sie sich wenigstens in der Anzahl und/oder Typ unterscheiden: int naechste (int a) { return (++a); int naechste (int a, int b) { return (a + b); char naechste (char a, int b) { return static_cast<char>(a + b); int main() { cout << Nach 2 kommt << nachste(2); cout << Nach F kommt << nachste(f); cout << 2te nach 3 ist << nachste(2,3); cout << 2te nach F ist << nachste('f',2); return (0);

Instantiierung von Objekten Wie bei Datenstrukturen können wir nun Variablen (in C++ Instanzen einer Klasse) anlegen. Diese können wie in C automatisch, statisch oder dynamisch angelegt werden. Objekte werden automatisch instantiiert, wenn eine Variable dieser Klasse in einem Block angelegt wird. void zeichnung() { kreis kopf (100, 50, 20, SCHWARZ); rechteck rumpf (170, 80, 21, SCHWARZ); linie bein1 (200, 80, 50, 50, SCHARZ);... kopf.draw();... Es muss einen von der Parametersignatur her passenden Konstruktor geben, der zur Ausführung kommt

Instantiierung von Objekten II Bei statischen Objekten wird zwischen Objekten, die außerhalb- und Objekten, die innerhalb einer Funktion angelegt werden. Beispiel zeichnung(): static kreis kopf (100, 50, 20, SCHWARZ); static rechteck rumpf (170, 80, 21, SCHWARZ); void zeichnung() { static linie bein1 (200, 80, 50, 50, SCHARZ); static linie bein2 (230, 80, 30, 250, SCHARZ);... kopf.draw();...

Instantiierung von Objekten III Statische Objekte außerhalb von Funktionen (also vor main()) werden vor Programmstart initialisiert. Innerhalb von Funktionen werden statische Objekte einmal initialisiert, sobald sie vom Programmdurchlauf erreicht werden. Sie werden erst nach Beendigung des gesamten Programms in umgekehrter Reihenfolge ihrer Instantiierung entfernt.