Vokabeln. 4.1 Benutzer definierte Datentypen. Kapitel 4. Prof. Dr. Gerhard Berendt C++ oop? SS 2002 Arbeitsblatt 4
|
|
- Insa Geisler
- vor 6 Jahren
- Abrufe
Transkript
1 4.1 Benutzer definierte Datentypen C++ unterstützt die Einführung benutzer definierter Datentypen (auch Abstrakte Datentypen (ADT) genannt). ADTs bieten einen guten Einstieg in das Paradigma der objekt orientierten Programmierung, können aber auch ohne dieses Paradigma verwendet werden. Das ist nicht nur in C++, sondern auch in vielen anderen Programmiersprachen möglich: So kann ein ADT etwa in PASCAL oder C durch das Konstrukt der Struktur definiert werden. Die Struktur ist als struct auch in C++ verfügbar; darüber hinaus enthält C++ den neuen Begriff der Klasse als class, die eine Verallgemeinerung der Struktur in Richtung auf die objekt orientierte Programmierung darstellt. In diesem Kapitel werden wir für die Einführung von ADTs zwar das Konstrukt der Klasse verwenden, jedoch von den weitergehenden Möglichkeiten einer Klasse in Hinblick auf die objekt orientierte Programmierung noch keinen Gebrauch machen. Vokabeln Kapitel 4 ADT Klasse oder benutzer definierter Datentyp: Ein Datentyp, der aus einer Zusammenfassung unterschiedlich vieler verschiedener Basis Datentypen besteht. Er wird in C++ durch eine Klasse realisiert, in der die zu diesem Typ gehörenden Basis Datentypen und auf die entsprechenden Variablen zugreifenden Funktionen zusammengefasst werden Zusammenfassung unterschiedlich vieler verschiedener Basis Datentypen und darauf wirkenden Funktionen zu einem ADT mit differenzierten Zugriffsrechten, die durch die Schlüsselwörter private bzw. public unterschieden werden 1
2 Datenelemente Elementfunktionen Zugriffs Qualifizierer private public Konstruktor Destruktor Datenobjekte von Basis Typen in einer Klasse Funktionen in einer Klasse, die auf deren Datenelemente zugreifen können gibt den Grad der Zugriffsberechtigung der nachfolgenden Klassenelemente an Zugriffs Qualifizierer in der Deklaration einer Klasse. Die danach aufgeführten Datenelemente und/oder E- lementfunktionen sind nur innerhalb der Klasse erreichbar Zugriffs Qualifizierer in der Deklaration einer Klasse. Die danach aufgeführten Datenelemente und/oder E- lementfunktionen sind auch von außerhalb der Klasse erreichbar Spezielle Elementfunktion einer Klasse, die die Initialisierung eines Objekts dieser Klasse besorgt Elementfunktion, die ein Klassenobjekt zerstört Wie auch bei der Einführung eines Basis Datentyps in ein Programm ist als erstes die Frage zu stellen: Was soll mit den Objekten des Datentyps gemacht werden können? Darüber hinaus tritt bei benutzer definierten Datentypen die Frage auf: Wie ist der interne Aufbau dieser Objekte (aus Basis Typ Objekten)? Das Klassenkonzept beantwortet diese beiden Fragen so, dass der interne Aufbau der ADT Objekte in einem als private gekennzeichneten Teil der Klassendeklaration vorgenommen wird, während die Schnittstelle mit dem Rest der Welt in einem als public gekennzeichneten Teil der Klassendeklaration durch Elementfunktionen aufgebaut wird, die auf die internen Objekte der Klasse zugreifen. Ein direkter Zugriff von außerhalb der Klasse auf Daten, die als private eingeführt wurden, ist nicht möglich. Nach diesem Konzept richtet sich auch die Syntax für Klassen, die sich im übrigen natürlich weitgehend auf die bereits bei der Benutzung von Basis Datentypen bezieht: So müssen beispielsweise will man die Elementfunktionen nicht inline definieren auch Klassen in Header Dateien deklariert und in zugehörigen Implementierungs Dateien definiert werden. Neuartig bei der Erstellung von ADTs sind eigentlich nur die Zusammenfassung von Daten und Funktionen in einer Klasse sowie die Art der Initialisierung von Klassenobjekten mit Hilfe der Konstruktoren. 2
3 4.2 Klassen und Abstrakte Datentypen In C++ können (müssen jedoch nicht) benutzer definierte Datentypen mit Hilfe des Konstrukts der Klasse eingeführt werden. Syntax Kapitel 4 Das Konstrukt der Klasse hat in C++ die Syntax class Klassenname Deklaration der Klassenelemente Im Detail sieht das für den einfachsten Fall der Einführung eines ADT so aus: class Name public: Deklaration der öffentlichen Klassenelemente (ohne Zugriffs Qualifizierer) private: Deklaration der internen Klassenelemente (ohne Zugriffs Qualifizierer) 3
4 public: und private: Blöcke können in beliebiger Reihenfolge angeordnet und wiederholt werden. Fehlt in der Klassendefinition ein Zugriffs Qualifizierer, dann wird der anschließende Deklarationsteil ggf. also auch die gesamte Klassendeklaration als private angenommen. Eine Klasse definiert nicht nur einen neuen Datentyp, sondern auch einen eigenen Bereich (mit dem Namen der Klasse). Von außerhalb dieses Bereiches kann daher auf die (erreichbaren) Klassenelemente mit dem Bereichsoperator : : zugegriffen werden. Die Deklaration einer Elementfunktion folgt der Syntax der Deklaration einer gewöhnlichen Funktion, wobei als Datentyp für Parameter und Rückgabewert nun auch der Klassenname (als neuer Datentyp) verwandt werden darf. Eine Elementfunktion für ein Klassenobjekt kann in der Form Ausdruck. Elementfunktionsname(Parameterliste); aufgerufen werden, wobei Ausdruck sich auf ein Klassenobjekt oder eine Referenz darauf beziehen muß. Konstruktoren. Konstruktoren sind spezielle Elementfunktionen einer Klasse, die angeben, wie ein Objekt der Klasse erzeugt werden kann. Konstruktoren werden sinnvollerweise im public Bereich deklariert; sie haben den gleichen Namen wie die Klasse und keinen Rückgabetyp (also auch nicht den Typ void). Aus diesem Grunde werden sie bei ihrer Definition auch nicht mit return abgeschlossen: class Klassenname Klassenname(Parameter Deklarationsliste); Alle Elementfunktionen einer Klasse also auch Konstruktoren können wie gewöhnliche Funktionen überladen und/oder mit Default Parametern besetzt werden; 4
5 daher ist es möglich, verschiedene Initialisierungen für Objekte eines ADTs vorzugeben. Elementfunktionen können auch inline definiert werden, indem sie einfach (ohne das Schlüsselwort inline) im Rumpf der Klassendeklaration definiert werden. Da Konstruktoren häufig lediglich die Datenelemente der Klasse initialisieren, existiert eine vereinfachte Syntax, die die Implementierung des Konstruktors in die Klassendeklaration hineinnimmt: class Klassenname Klassenname(Parameter Deklarationsliste) : Initialisierungsliste Hierbei enthält die Initialisierungsliste die Initialisierungen der Datenelemente, durch Kommata getrennt. Beispiel: Wir wollen (in verschiedenen Stadien der Perfektion) den neuen Datentyp "Bruch" einführen. Im ersten Schritt soll es nur möglich sein, einen Bruch definiert durch Zähler und Nenner ein und wieder in der Form "Zähler / Nenner" auszugeben. Dazu führen wir die Klasse Bruch ein, die wir in der Header Datei Bruch.h definieren: Header Datei Bruch.h #ifndef BRUCH_H #define BRUCH_H #include <iostream.h> class Bruch 5
6 private: int zaehler; int nenner; hoffentlich nicht = 0! public: Bruch(int z, int n); void print(); #endif Konstruktor Die Implementierungsdatei Bruch.cpp muß die Definition des Konstruktors und der Ausgabefunktion print() enthalten: Implementierungs Datei Bruch.cpp #include "Bruch.h" #include <stdlib.h> fuer die exit-funktion Bruch::Bruch(int z, int n) zaehler = z; nenner = n; if (n == 0) cout << "Nulldivision verboten!\n"; exit(8); void Bruch::print() cout << "Bruch = " << zaehler << "/" << nenner; 6
7 cout << "\n"; return; Eine Quelldatei, die den neuen Datentyp testet, könnte wenn man mit nur einer Quelldatei auskommen möchte nun so aussehen: Test Datei Bruchtst.cpp #include "Bruch.cpp" #include <stdio.h> int main() int z, n; cout << "Eingabe Zaehler: "; cin >> z; cout << "Eingabe Nenner: "; cin >> n; Bruch b(z,n); b.print(); getchar(); return 0; Aufgabe: Vermeiden Sie in diesem einfachen Fall die Erstellung der Implementierungsdatei Bruch.cpp, indem Sie die Elementfunktionen der Klasse Bruch als inline Funktionen innerhalb der Klassendeklaration definieren. Prüfen Sie danach die Testdatei. Während es sicher sinnvoll ist, einen Bruch durch die explizite Angabe von Zähler und Nenner zu definieren, mag es stören, dass der Versuch, einen Bruch ohne Initiali- 7
8 sierung durch Zähler und Nenner in das Testprogramm einzugeben, zu einem Compiler Fehler führt: Während C++ implizit in jeder Klassendeklaration einen Default Konstruktor ohne Parameter einrichtet, sofern nicht explizit ausschließlich andere Konstruktoren deklariert wurden, muß ein solcher Default Konstruktor vom Benutzer eingeführt werden, wenn dieser auch andere Konstruktoren deklariert hat. In unserem Beispiel haben wir explizit nur den Konstruktor mit zwei Parametern definiert; in diesem Falle nimmt der Compiler mithin an, dass es keinen Default Konstruktor geben soll. Diese Situation kann auf zweierlei Art vermieden werden: Entweder führt der Benutzer durch Überladen einen Default Konstruktor (und vielleicht auch noch andere) explizit ein, oder er benutzt bei der Deklaration des Konstruktors die Möglichkeit von Default Parametern: a) Bruch(); Bruch(int z); Bruch(int z, int n); b) Bruch(int z=0, int n=1); Im zweiten Schritt soll mit Brüchen auch gerechnet werden; d.h. wir wollen die Grundrechenarten auch auf den neuen Datentyp Bruch anwenden können. Dazu nehmen wir zunächst zwei neue Funktionen add() und mul()in den öffentlichen Teil der Klassendefinition auf: Bruch add(bruch b); Bruch mul(bruch b); 8
9 Diese Funktionen sollen so implementiert werden, dass beispielsweise für zwei Brüche b1 und b2 b1.add(b2) die Summe der Brüche b1 und b2 (wieder als Bruch) ergibt. In der Implementierungs Datei Bruch.cpp sieht das dann so aus: Bruch Bruch::add(Bruch b) int z_res = (zaehler * b.nenner + nenner * b.zaehler); int n_res = (nenner * b.nenner); return Bruch(z_res, n_res); Bruch Bruch::mul(Bruch b) int z_res = (zaehler * b.zaehler); int n_res = (nenner * b.nenner); return Bruch(z_res, n_res); Die Testdatei könnte nun beispielsweise so aussehen: Test Datei Bruchtst.cpp #include "Bruch.cpp" #include <stdio.h> int main() int z, n; Bruch q(2,9), r(0,1); cout << "Erster Bruch ist 2/9 \n"; 9
10 cout << "Eingabe Zaehler: "; cin >> z; cout << "Eingabe Nenner: "; cin >> n; Bruch b(z,n); b.print(); r = b.add(q); r.print(); r = b.mul(q); r.print(); getchar(); return 0; 4.3 Überladen von Operator Funktionen Die Tatsache, dass in C++ Operator Funktionen überladen werden können, eröffnet die Möglichkeit, Operationen auf benutzer definierten Datentypen in vereinfachter Form zu schreiben. Die Deklarationen für überladene Operatoren sehen für einfache Funktionen und Elementfunktionen in Klassen analog aus. Für gewöhnliche Funktionen ist die Syntax: Ergebnistyp operator op(parameterliste); wobei op der zu überladende Operator ist; für Elementfunktionen lautet sie: class Klassenname Ergebnistyp operator op(parameterliste); Im ersten Fall muß die Parameterliste die "Arität" des Operators beachten; im zweiten Fall muß ihre Länge um eins geringer sein, da das Zielobjekt bereits den ersten Operanden liefert. 10
11 Die meisten Operatoren können überladen werden; natürlich können sie nicht für die eingebauten Typen umdefiniert werden. Ein überladener Operator muß daher mindestens einen Parameter eines benutzer definierten Typs enthalten. Wollte man die Operatoren "+" und "*" im Beispiel Bruch so überladen, dass Ausdrücke, die Objekte vom Typ Bruch enthalten, in der gewohnten Schreibweise angegeben werden können, dann wäre mithin die Header Datei Bruch.h (mit enthaltener Definition der Elementfunktionen) wie folgt zu ergänzen: Bruch operator+(bruch b) return add(b) Bruch operator*(bruch b) return mul(b) Additionen und Multiplikationen von Brüchen können damit durch Ausdrücke etwa der Form b1 + b2 * b3 problemlos bewältigt werden; während dabei der Ausdruck b1 * 2 korrekt ausgewertet wird, liefert der Compiler hingegen einen Fehler bei dem Ausdruck 2 * b1 (warum?). Um auch diesen Ausdruck auswerten zu können, müssen die Operator Funktionen "+" und "*" als gewöhnliche Operatorfunktionen deklariert werden. Daher wird die Header Datei Bruch.h nicht innerhalb, sondern außerhalb der Klassendefinition ergänzt: class Bruch inline Bruch operator+(bruch b1, Bruch b2) return b1.add(b2) inline Bruch operator*(bruch b1, Bruch b2) return b1.mul(b2) 11
12 Übungen: 4.1 Definieren Sie in einer modifizierten Header Datei die Elementfunktionen der Bruch Klasse inline. Verwenden Sie Initialisierungslisten für die Konstruktoren. Implementieren Sie die Operatoren für die Addition und die Multiplikation von Brüchen. Testen Sie das Programm, indem Sie 1/7 + 23/12 und 3/11 * 5/9 berechnen. 4.2 Implementieren Sie Funktionen int zae() und int nen(), die Zähler und Nenner eines Bruches zurückgeben. Führen Sie dann eine Funktion void kuerzen() ein, die einen Bruch kürzt. Verwenden Sie dazu die Funktion int ggt(int a, int b), die wie im 3. Kapitel gebildet wird. Berechnen und kürzen Sie dann (1/3 + 1/5) * 9/ Vektoren im R 3 werden durch Tripel reeller Zahlen dargestellt. Erstellen Sie eine Klasse Vektor, deren Objekte intern durch drei double Zahlen definiert werden. Benutzen Sie dazu nicht das Konstrukt eines Arrays. Definieren Sie einen Default Konstruktor, der das Tripel (0,0,0) erzeugt und einen weiteren Konstruktor, der ein Tripel aus drei double Zahlen erzeugt. Definieren Sie eine Ausgabefunktion, die einen gegebenen Vektor ausgibt und Operator Funktionen, die zwei Vektoren addieren und einen Vektor mit einer reellen Zahl multiplizieren. Schreiben Sie ein Testprogramm, in das Sie die beiden Vektoren (1, 3.2, 5) und (0.2, 12, 4.3) von der Tastatur eingeben, und das Ihnen die Summe aus dem 15 fachen des ersten und dem 3.5 fachen des zweiten Vektors ausgibt. Berechnen Sie diesen neuen Vektor. 12
C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren
C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja Aue
MehrC++ Klassen weitere Funktionen
C++ Klassen weitere Funktionen Übersicht static Elemente const Elemente Zusätzliches zu Konstruktoren Kopier-Konstruktor Konvertierung-Konstruktor Initialisierungslisten Friend Funktionen 2 Statische Klassenkomponenten
MehrInhalte der Grundlagen
Inhalte der Grundlagen Programmieren mit Klassen Operatoren für Klassen Laufzeit- und Codeoptimierung Referenzen und Konstanten UGE - IPD Freunde und andere Typen Templates UGE - IPD UGE - IPD UGE - IPD
MehrC++ - Objektorientierte Programmierung Konstante und statische Elemente
C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja
Mehr10.4 Konstante Objekte
10.4 Konstante Objekte Genau wie bei einfachen Datentypen (int,double,...) kann man auch Objekte als const deklarieren. Eine solche Deklaration bedeutet, daß alle Attribute so behandelt werden, als wären
Mehr7. Übung Informatik II - Objektorientierte Programmierung
7. Übung Informatik II - Objektorientierte Programmierung 29. Mai 2015 Inhalt 1 2 3 Übersicht 1 2 3 Idee Menschen nehmen die Welt in Form von Objekten wahr manche Objekte haben gleiche Eigenschaften, hierüber
MehrKlassen. Kapitel Klassendeklaration
Kapitel 4 Klassen Wir kommen nun zu einem sehr wichtigen Aspekt der OOT: zu den Klassen. Eine Klasse ist eine vom Benutzer definierte Datenstruktur, eine Sammlung von Variablen (unterschiedlichen Typs)
MehrÜberblick. 5. Objekt und Klasse, Elementfunktionen
Überblick 1. Einführung C++ / Entwicklung/ Sprachfamilie 2. Nicht objektorientierte Erweiterungen von C 2.1 Das Ein-/Ausgabekonzept von C++ 2.2 Referenzen in C++ 2.3 Heap-Allokatoren in C++ 3. Grundlagen
MehrProgrammierung und Angewandte Mathematik
Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Inhalt Compiler/Editor Klassendeklaration
Mehr1 Klassen und Objekte
1 Klassen und Objekte Datentyp - Spezifikation des Typs von Datenobjekten Datenstruktur - logische Ordnung von Elementen eines Datentyps - zur (effizienten) Speicherung, Verwaltung, Zugriff - auf die Elemente
MehrThema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen
1 Thema heute: Vererbung und Klassenhierarchien Abgeleitete Klassen Vererbung von Daten und Funktionen Virtuelle Funktionen 2 Vererbung oft besitzen verschiedene Datentypen einen gemeinsamen Kern Beispiel:
MehrAlgorithmen zur Datenanalyse in C++
Algorithmen zur Datenanalyse in C++ Hartmut Stadie 11.06.2012 Algorithmen zur Datenanalyse in C++ Hartmut Stadie 1/ 28 Einführung Klassen Übung Algorithmen zur Datenanalyse in C++ Hartmut Stadie 2/ 28
MehrProgrammieren in C/C++ und MATLAB
Programmieren in C/C++ und MATLAB Christian-Albrechts-Universität zu Kiel CAU 8-1 Objektorientiertes Programmieren Die Programme, die bisher in diesem Kurs verwendet wurden, sind alle klein und überschaubar
Mehr3. Exkurs in weitere Arten der Programmierung
3. Exkurs in weitere Arten der Programmierung Inhalt: Objektorientierte Programmierung in C++ Logische Programmierung in Prolog Peter Sobe Objektorientierte Programmierung in C++ C++ ist eine objektorientierte
MehrMapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.
Mapra: C++ Teil 4 Felix Gruber IGPM, RWTH Aachen 6. Mai 2015 Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6. Mai 2015 1 / 22 Themen vom letzten Mal Kompilieren mit Makefiles Ein-/Ausgabe über Dateien
MehrObjektorientierte Programmierung mit C++ SS 2007
Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string
MehrPolymorphismus 179. Function.h. #include <string>
Polymorphismus 179 #include Function.h class Function { public: virtual ~Function() {}; virtual std::string get_name() const = 0; virtual double execute(double x) const = 0; }; // class Function
MehrImplementieren von Klassen
Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und
MehrPolymorphismus 44. Function.hpp. #include <string>
Polymorphismus 44 #include Function.hpp class Function { public: virtual ~Function() {}; virtual const std::string& get_name() const = 0; virtual double execute(double x) const = 0; }; // class
MehrNumerische Methoden und Algorithmen in der Physik
Numerische Methoden und Algorithmen in der Physik Hartmut Stadie, Christian Autermann 04.12.2008 Numerische Methoden und Algorithmen in der Physik Hartmut Stadie 1/ 33 Einführung Klassen Optimierung Vererbung
MehrRepetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
MehrOOP und Angewandte Mathematik (Praktikum 1) Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik
(Praktikum 1) Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik WS 2011/12 Inhalt Klassen in C++ Beispiele, mit Aufzeigen der Trennung von Spezifikation und Implementierung
MehrC++ - Objektorientierte Programmierung Vererbung
C++ - Objektorientierte Programmierung Vererbung Personen Kunden Mitarbeiter Verwaltung Verkäufer Leibniz Universität IT Services Anja Aue Vererbung Definition von Klassen auf Basis von bestehenden Klassen.
MehrEinstieg in die Informatik mit Java
1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition
MehrEinführung in die Programmierung mit C++
1 Seite 1 Einführung in die Programmierung mit C++ Teil III - Objektorientierte Programmierung 9. Klassen und Methoden Was sind Klassen? Seite 2 sprachliches Mittel von C++ um objektorientierte Programmierung
MehrKapitel 13. Definition von Klassen. OOP Thomas Klinker 1
Kapitel 13 Definition von Klassen OOP Thomas Klinker 1 OOP Thomas Klinker 2 Datenabstraktion Der Mensch abstrahiert, um komplexe Sachverhalte darzustellen. Dinge und Vorgänge werden auf das wesentliche
MehrRückblick: Benutzerdefinierte Datentypen Definition der Klasse Vektor als Container für 2-dimensionale Vektoren
Rückblick: Benutzerdefinierte Datentypen Definition der Klasse Vektor als Container für 2-dimensionale Vektoren class Vektor public: double k1, k2; // Deklaration der Klasse Vektor // Elementvariablen
MehrÜberblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse
Überblick 1. Einführung C++ / Entwicklung/ Sprachfamilie 2. Nicht objektorientierte Erweiterungen von C 2.1 Das Ein-/Ausgabekonzept von C++ 2.2 Referenzen in C++ 2.3 Heap-Allokatoren in C++ 3. Grundlagen
MehrEinstieg in die Informatik mit Java
1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden
MehrProf. W. Henrich Seite 1
Klasse - ist ein benutzerdefinierter Datentyp (Referenztyp) - hat Datenelemente - hat Methoden - Konstruktor ist spezielle Methode zum Erstellen eines Objektes vom Typ der Klasse (Instanz) - jede Klasse
MehrMethoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only
Methoden Wie Konstruktoren und Destruktoren zum Auf- und Abbau von Objekten definiert werden, Wie inline-methoden Methoden,, Zugriffsmethoden und Read-Only Only- Methoden einzusetzen sind, Der this-pointer
Mehr4.1 Die erste Klasse: Bruch
132 Kapitel 4: Programmieren von Klassen 4.1 Die erste Klasse: Bruch In diesem Abschnitt wird als erste C++-Klasse die Klasse Bruch implementiert und angewendet. Die Klasse Bruch bietet dabei ein kleines,
MehrProgrammierkurs C/C++
Blockkurs: "Einführung in C/C++" Programmierkurs C/C++ Donnerstag Sandro Andreotti andreott@inf.fu-berlin.de WS 2008/09 1 Structs Blockkurs: "Einführung in C/C++" 2 Structs sind Bündel von Variablen (unter
MehrPrüfung aus PROGRAMMIEREN (2) (C++) (WS 2002/03)
Fachhochschule München Bereich Datentechnik Fachbereich Elektrotechnik und Informationstechnik A. Irber / R. Thomas Prüfung aus PROGRAMMIEREN (2) (C++) (WS 2002/03) Arbeitszeit 90 Minuten 27.Januar 2003
Mehr6 ZEIGER UND REFERENZEN - ALLGEMEINES
6 ZEIGER UND REFERENZEN - ALLGEMEINES Leitideen: Zeiger sind Adressen mit zusätzlicher Typinformation über das dort gespeicherte Objekt. Die Vereinbarungssyntax soll der Ausdruckssyntax entsprechen und
MehrEinführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)
Wintersemester 2005/06 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich Informatik Lehrstuhl
MehrEinstieg in die Informatik mit Java
1 / 35 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 35 1 Grundlagen 2 Verdeckte Variablen 3 Verdeckte Methoden 4 Konstruktoren
MehrC++ kompakt - Teil 1. Danke an Matthias Biedermann Markus Geimer
C++ kompakt - Teil 1 Danke an Matthias Biedermann Markus Geimer Programmorganisation (1) Ein C++ Projekt kann auf mehrere Quelldateien verteilt werden. Dabei muss in genau einer Quelldatei die Funktion
MehrInformatik 1 MaVt FS Übung 10
Informatik 1 MaVt FS 2010 Übung 10 Claudia Kuster ckuster@inf.ethz.ch Mittwoch 13-15h HG E 27 http://graphics.ethz.ch/~ckuster/teaching/mavt_info1_2010.html Vorlesung Objektorientierte Programmierung Konstruktoren
MehrTag 7 Repetitorium Informatik (Java)
Tag 7 Repetitorium Informatik (Java) Dozent: Patrick Kreutzer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium
MehrOOP und Angewandte Mathematik. Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik
Eine Einführung in die Anwendung objektorientierter Konzepte in der angewandten Mathematik WS 2011/12 Inhalt Test-Besprechung! Ziele verdeutlichen Große Bild von OOP Wiederholung: Einbettung als Technik
MehrEinstieg in die Informatik mit Java
1 / 16 Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 16 1 Einführung 2 Element-Klassen 3 Lokale Klassen 4 Anonyme Klassen
MehrMikrorechentechnik II. Klassen in C++
Mikrorechentechnik II Klassen in C++ class class cfilter { float K; float T; float Ta; public: // Filterverstärkung // Filterzeitkonstante // Tastzeit Zugriffskontrolle: public, protected, private void
MehrGrundlagen der Informatik
Grundlagen der Informatik Polymorphie, Abstrakte Klassen, Mehrfachvererbung Prof. Dr.-Ing. Thomas Wiedemann Prof. Dr. rer.nat. Ralph Großmann Fachgebiet Informatik / Mathematik Überblick zum Inhalt Klassen-3
MehrProbeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
MehrGrundkurs C++ IDE Klassenhierarchien
Grundkurs C++ IDE Klassenhierarchien Martin Knopp 03.05.2017 Folie 1/34 GK C++: IDE, Klassenhierarchien Martin Knopp 03.05.2017 IDE Integrated Development Environment Wir empfehlen: Qt Creator (Bestandteil
MehrObjektorientierte Programmierung und Klassen
Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 16.5.07 G. Bohlender (IANM UNI Karlsruhe) OOP
MehrThema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen
1 Thema heute: Vererbung und Klassenhierarchien Abgeleitete Klassen Vererbung von Daten und Funktionen Virtuelle Funktionen 2 Vererbung oft besitzen verschiedene Datentypen einen gemeinsamen Kern Beispiel:
MehrVorlesungsprüfung Programmiersprache 1
Vorlesungsprüfung Programmiersprache 1 Termin der Prüfung: 1) Di 20.03.2018 16:15 17:00 HSB 3 2) Di 15.05.2018 16:15 17:00 HSB 3 3) Di 12.06.2018 16:15 17:00 HSB 3 Stoffgebiete: 1) Ganzzahltypen: char,
MehrProgrammieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden
Einleitende Bemerkungen Einleitende Bemerkungen Aspekte Aufbau von sinnvollen Klassenhierarchien Verwaltung von Objekten unterschiedlichen Typs Mitarbeiter Besonderheiten der Anwendung jeder Angehörige
MehrGrundkurs C++ IDE Klassenhierarchien
Grundkurs C++ IDE Klassenhierarchien Martin Knopp & Johannes Feldmaier 20.04.2016 Folie 1/35 GK C++: IDE, Klassenhierarchien Martin Knopp & Johannes Feldmaier 20.04.2016 IDE Integrated Development Environment
Mehr9 Programmieren von Klassen
9 Programmieren von Klassen 9.1 Einführung Zentrales Konzept in der Objektorientierten Programmierung ist die Kapselung von Daten und Elementfunktionen, die sogenannte Encapsulation. In Objektorientierten
MehrProgrammierkurs C++ Datenstrukturen Seite 1
Programmierkurs C++ Datenstrukturen Seite 1 3 Datenstrukturen 3.1 Arrays Zur Wiederholung als Strukturelement der Programmierung gehört auf der Seite der Datenstrukturen die Liste. Eine Liste kann auf
MehrC++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue
C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen Leibniz Universität IT Services Anja Aue Modularisierung Logische Gliederung von Programmteilen mit Hilfe von Namensräumen. Aufteilung
MehrC++ Klassen. Grundlagen
C++ Klassen Grundlagen Übersicht Klassen im Überblick Definition und Nutzung Datenelemente Elementfunktionen this-zeiger Konstruktor / Destruktor Beispiel: 2 Definition einer Klasse Die Definition einer
MehrJava Einführung Methoden. Kapitel 6
Java Einführung Methoden Kapitel 6 Inhalt Deklaration und Aufruf von Methoden Lokale und globale Namen (Bezeichner) Sichtbarkeit und Lebensdauer von Variablen in Methoden Überladen von Methoden 2 Methoden
MehrVererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.
Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 23.5.07 G. Bohlender (IANM UNI Karlsruhe) Vererbung 23.5.07 1 / 22 Übersicht 1
MehrÜberblick. Peer Kröger (LMU München) Einführung in die Programmierung WS 14/ / 492
Überblick 6. Grundlagen der objektorientierten Programmierung 6.1 Abstrakte Datentypen: von Structures zu Klassen 6.2 Das objektorientierte Paradigma 6.3 Peer Kröger (LMU München) Einführung in die Programmierung
MehrHSR Rapperswil 2001 Markus Rigling. Programmieren: Templates Auflage
HSR Rapperswil 2001 Markus Rigling Programmieren: Templates 1 1. Auflage Inhaltsverzeichnis: Templates.1 1. Verwendung 3 2. Erstellen einer Templateklasse. 3 3. Faustregel zum Erstellen eines Klassentemplates..
MehrThemen. Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren
Themen Statische Methoden inline Methoden const Methoden this Zeiger Destruktor Kopierkonstruktor Überladen von Operatoren Statische Methoden Klassenmethoden Merkmal der Klasse nicht eines einzelnen Objekts
MehrObjektorientierte Programmierung
Programmierkurs C++ Kapitel 7:Objektorientierte Programmierung Seite 1 Objektorientierte Programmierung If programming in PASCAL is like put in a straightjacket, then programming in C is like playing with
MehrWintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29
Kapitel 2 Einführung in C++ Seite 1 von 29 C++ Zeichensatz - Buchstaben: a bis z und A bis Z. - Ziffern: 0 bis 9 - Sonderzeichen: ; :,. # + - * / % _ \! < > & ^ ~ ( ) { } [ ]? Seite 2 von 29 Höhere Elemente
MehrMapra: C++ Teil 4. Felix Gruber, Michael Rom. 24. Mai 2016 IGPM. Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 4 24.
Mapra: C++ Teil 4 Felix Gruber, Michael Rom IGPM 24. Mai 2016 Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 4 24. Mai 2016 1 / 25 Themen vom letzten Mal Kompilieren mit Makefiles Ein-/Ausgabe über Dateien
MehrObjektorientierung. Marc Satkowski 20. November C# Kurs
Objektorientierung Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Weiterführende Verzweigungen Tertiäre-Verzweigung switch case 2. Schleifen Zählschleife (for) break & continue 3. Objektorientierung
MehrVerwendung von Klassen in C++
Verwendung von Klassen in C++ Heute: Benutzerdefinierte Datentypen (Konkrete Klassen) Vektoren Komplexe Zahlen Adressdatei Morgen: Objektorientierte Programmierung (Abstrakte Klassen) Vererbung Polymorphie
Mehrint i=1; //Integerzahl i anlegen und mit 1 initialisieren float wert; //Floatzahl deklarieren scanf( %f,&wert); //Wert über Tastatur eingeben
Datenfelder (Array) Seite 1 von 7 Bei den bisherigen Programmen wurde für jede verwendete Variable (oder für jedes Objekt) ein eigener Typ und Name vergeben. Die Initialisierung, d.h. die Belegung mit
MehrProgrammierung III. Pointer für Fortgeschrittene Marc Ruberg. Arrays von Pointern ( Zeigervektoren ): Pointer auf Pointer:
Programmierung III Marc Ruberg 1 Pointer für Fortgeschrittene Arrays von Pointern ( Zeigervektoren ): long *zahlenptr[25]; char *strptr[1000]; Pointer auf Pointer: char **sp Zeiger auf Funktionen: Typ
MehrObjektorientierte Programmierung
C++ Objektorientierte Programmierung Erweiterung von selbstdefinierten Datentypen (struct) zu Klasse. Eine Klasse besteht dann aus - Attributen (Untertypen wie struct) und zusätzlich - aus Methoden (Funktionen
MehrEinstieg in die Informatik mit Java
1 / 41 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 41 1 Überblick: Vererbung 2 Grundidee Vererbung 3 Verdeckte Variablen
MehrAufbau von Klassen. class punkt {...
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
MehrInformatik I (D-MAVT)
Informatik I (D-MAVT) Übungsstunde 9 simon.mayer@inf.ethz.ch Distributed Systems Group, ETH Zürich Ablauf Nachbesprechung Übung 7 Besprechung/Vertiefung der Vorlesung Vorbesprechung Übung 9 Aufgabe 1:
MehrInnere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java
Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 13.06.07 G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 1 / 11
MehrAngewandte Mathematik und Programmierung
Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der
MehrProgrammieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Programmieren II Klassen. Zur Erinnerung.
Vorbemerkungen Zur Erinnerung aktueller Standpunkt: Entwickler von (bibliotheken) jetzt sind wichtig interne Repräsentation der Daten Realisierung der gewünschten Funktionalität Bereitstellung geeigneter
MehrC++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11
C++ Teil 12 Sven Groß 18. Jan 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 12 18. Jan 2016 1 / 11 Themen der letzten Vorlesung Wiederholung aller bisherigen Themen: Datentypen und Variablen Operatoren Kontrollstrukturen
MehrObjektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11
Objektorientierte Programmierung mit C++ Zusammenfassung der wichtigsten Topics rund um die objektorientierte Programmierung mit C++11 Wozu objektorientiertes Programmieren? Die Welt besteht für den Menschen
Mehr3 Objektorientierte Konzepte in Java
3 Objektorientierte Konzepte in Java 3.1 Klassendeklarationen Fragen an die Klassendeklaration: Wie heißt die Klasse? Wer darf auf die Klasse und ihre Attribute/Methoden zugreifen? Ist die Klasse eine
MehrObjektorientierte Programmierung
Objektorientierte Programmierung Bis jetzt kennen wir (fast) nur primitive Datentypen. Diese entsprechen weitestgehend der Hardware des Rechners (z.b. besitzt ein Rechner Hardware um zwei floats zu addieren).
MehrC++ - Operatoren. Eigene Klassen mit neuen Funktionen
C++ - Operatoren Eigene Klassen mit neuen Funktionen Übersicht Klassen bisher Eigene Operatoren definieren 2 Bisher Durch Kapselung, Vererbung und Polymorphy können nun eigene Klassen definiert werden,
MehrObjektorientierte Programmierung
Objektorientierte Programmierung Bis jetzt kennen wir (fast) nur primitive Datentypen. Diese entsprechen weitestgehend der Hardware des Rechners (z.b. besitzt ein Rechner Hardware um zwei floats zu addieren).
MehrPROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy
PROCESSING EINE ZUSAMMENFASSUNG Created by Michael Kirsch & Beat Rossmy INHALT 1. Typen und Operatoren 1. Datentypen 3. Klassen und Objekte 1. Klassen und Objekte 2. Operatoren 2. Konstruktor 3. Typkonversion
MehrVererbung, Polymorphie
Vererbung, Polymorphie Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 21.1.08 G. Bohlender (IANM UNI Karlsruhe) Vererbung, Polymorphie 21.1.08
Mehr3. Klassen Statische Komponenten einer Klasse. Klassenvariablen
Klassenvariablen Wir wollen die Zahl der instantiierten Studentenobjekte zählen. Dies ist jedoch keine Eigenschaft eines einzelnen Objektes. Vielmehr gehört die Eigenschaft zu der Gesamtheit aller Studentenobjekte.
MehrProgrammierkurs C++ Kapitel 6 Module Seite 1
Programmierkurs C++ Kapitel 6 Module Seite 1 (Quell-)Module Unter einem Modul versteht man einen Teil des Programms, der eigenständig übersetzt werden kann. In der Syntax der Programmiersprachen werden
MehrProgrammierung und Angewandte Mathematik
Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Ablauf Was sind Funktionen/Methoden
MehrObjektorientierte Programmierung
Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum
MehrHSR Rapperswil 2001 Markus Rigling. Programmieren: Exceptions Auflage
HSR Rapperswil 2001 Markus Rigling Programmieren: Exceptions 1 1. Auflage Inhaltsverzeichnis: 1. Was sind Exceptions?... 3 2. Struktur des Exception Handling... 3 3. Try-Block... 4 4. Exception Handler
Mehr1. Aufgabe (6 Punkte)
Nachname:... Vorname:... MatrNr.:... Klausur PR2 HAW-Hamburg, Fakultät Technik und Informatik, Department Informations- und Elektrotechnik Dr. Robert Heß, 1.2.2008 Bearbeitungsdauer: 90 min Hilfsmittel:
Mehr4. Objektorientierte Programmierung mit C++
4. Objektorientierte Programmierung mit C++ Einführung C++ / Entwicklung/ Sprachfamilie Nicht objektorientierte Erweiterungen von C Grundlagen des Typkonzepts von C++ Ziele der Objektorientierung Objekt
MehrGrundlagen der Informatik
Grundlagen der Informatik Musterklausur 1. Dynamische Datenstrukturen und objektorientierte Programmierung Zur Verwaltung einer digitalen Fotogalerie sollen Techniken der objektorientierten Programmierung
Mehr3.2 Datentypen und Methoden
Kap03.fm Seite 217 Dienstag, 7. September 2010 1:48 13 3.2 Datentypen und Methoden 217 3.2 Datentypen und Methoden Wie bei vielen höheren Programmiersprachen gibt es auch in Java einfache und strukturierte
MehrKlassenmethoden. Klassenvariablen. Für das Auslesen des Studentenzählers definieren wir eine öffentliche Klassenmethode:
Klassenvariablen Klassenmethoden Wir wollen die Zahl der instantiierten Studentenobjekte zählen. Dies ist jedoch keine Eigenschaft eines einzelnen Objektes. Vielmehr gehört die Eigenschaft zu der Gesamtheit
MehrEinführung in C# Teil 3. Matthias Nübling
Einführung in C# Teil 3 Matthias Nübling Vorausgesetzte Grundkenntnisse Programmierung Typen, Variablen, Anweisungen, Funktionen, etc. Objektorientierte Programmierung Klassen, Vererbung, Polymorphismus,
MehrAngewandte Mathematik in OOP WS 2011/12. Abschluss-Test
Angewandte Mathematik in OOP WS 2011/12 Abschluss-Test 012 6 5 4 5 6 Aufgabe 1 (9 Punkte 1 Punkt je Antwort) Bitte jeweils eine Antwort ankreuzen (je nach Fragestellung die richtige oder falsche): a.)
MehrKurze Einführung in die Benutzung des Dokumentationswerkzeugs Doxygen
Kurze Einführung in die Benutzung des Dokumentationswerkzeugs 2008 Gliederung 1 Zweck 2 Gliederung Zweck 1 Zweck 2 Zweck Zweck Erstellen einer übersichtlichen, zentralen Dokumentation im HTML-Format Überblick
MehrÜbungspaket 23 Mehrdimensionale Arrays
Übungspaket 23 Mehrdimensionale Arrays Übungsziele: Skript: Deklaration und Verwendung mehrdimensionaler Arrays Kapitel: 49 Semester: Wintersemester 2016/17 Betreuer: Kevin, Matthias, Thomas und Ralf Synopsis:
MehrCrashkurs C++ Wiederholung
Crashkurs C++ Wiederholung #include int main(void) { int i, j; bool is_prime; for (j = 1; j < 1000; j += 2) { is_prime = true; for (i = 3; i
MehrOMSI / Teil 1 / C++ Andreas Blunk. 5. April 2006, Berlin
OMSI / Teil 1 / C++ Andreas Blunk 5. April 2006, Berlin Zusammenfassung Dieses Dokument ist eine Ergänzung zu den Folien von C++ aus dem 1. Teil der Vorlesung Objektorientierte Modellierung, Spezifikation
MehrInstitut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke
Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen
MehrVererbung und Polymorphie
Vererbung und Polymorphie Marc Satkowski, Sascha Peukert 29. September 2016 C# Kurs Gliederung 1. Methodenüberladung 2. Vererbung Polymorphie Methoden- & Eigenschaftsüberschreibung Weitere Schlüsselwörter
Mehr