Tutorium Software-Engineering SS14 Florian Manghofer.

Slides:



Advertisements
Ähnliche Präsentationen
Programme in C++.
Advertisements

der Universität Oldenburg
Klassen - Verkettete Liste -
Abstrakte Klassen Basisklassen sollten in der Regel sehr allgemein sein. Oft ist es nicht notwendig, dass Objekte dieser generellen Basisklassen angelegt.
Objektorientierte Programmierung
Ein- und Ausgabe von Dateien
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Definition von Klassen in Java
Progwerkstatt JAVA Klasse, Objekte, Konstruktoren, Methoden
Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Donnerstag Andreas Döring SS 2004.
Java: Objektorientierte Programmierung
Indirekte Adressierung
Java: Grundlagen der Objektorientierung
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
Konstruktoren.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Methoden (Motivation) Idee: Identische Programmabschnitte zusammenfassen und mit einem Namen versehen Vorteile: Übersichtlichkeit.
Zusammenfassung Vorwoche
Abstrakter Datentyp in C++ I - Klasse -
Objektorientierte Programmierung
Das erste Programm (Folie 16)
DVG Klassen und Objekte
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Einführung in die Programmierung
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Dynamische Datentypen
Unterprogramme in JAVA
Prof. Dr.-Ing. Franz-Josef Behr
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
early binding (frühe Bindung) late binding (späte Bindung)
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
Java-Kurs - 6. Übung Besprechung der Hausaufgabe
Einführung in die Programmierung mit Java
Java-Kurs - 5. Übung Besprechung der Übungsaufgabe Klassen und Objekte
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 7. Vorlesung WS 2002/2003.
Erweiterte Zuweisungskompatibilität. Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?
Abstrakte Klassen und das Interface-Konzept
Tutorium Software-Engineering SS14 Florian Manghofer.
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Konstruktoren.
IOStreamLibrary.
Java-Kurs - 5. Übung Das Paradigma der Objektorientierung (OO)
Friends C++ ermöglicht, einzelne Funktionen oder ganze Klassen zu friends zu erklären. Friendfunktionen haben Zugang zu den privaten Daten einer Klasse.
Nksainf.ch/oinf.
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
IOStreamLibrary.
Einführung in die Programmierung
Von Cem, Maurice und lars
«Delegierter» Methoden Schablone Funktionszeiger
Implementieren von Klassen
Einführung in die Programmierung
Grundkurs Informatik 11-13
 Präsentation transkript:

Tutorium Software-Engineering SS14 Florian Manghofer

Überladen von Operatoren (SS11 6) Gegben ist folgendes Programm. #include using namespace std; class Klausur { private: int i; string s; public: Klausur() {} Klausur(int ii) { i = ii; s = "";} Klausur(int ii, string ss) : i(ii), s(ss) {} void zeigDich() { cout << i << " " << s << endl;} friend Klausur operator+ (const Klausur &links, const Klausur &rechts); }; Klausur operator+(const Klausur &links, const Klausur &rechts) { Klausur tmp; tmp.i = links.i + rechts.i; tmp.s = links.s + rechts.s; return(tmp); } int main() { Klausur x(1, " Klausur "); Klausur y(9, " Zeit "); x = x + y; x.zeigDich(); y = y + x; x.zeigDich(); x = x + y; x.zeigDich(); system("PAUSE"); return(0); }

Überladen von Operatoren (SS11 6.1) 1.1 Was gibt das Programm auf dem Bildschirm aus? Skizzieren Sie die Bildschirmausgabe. int main() { Klausur x(1, " Klausur "); Klausur y(9, " Zeit "); x = x + y; x.zeigDich(); y = y + x; x.zeigDich(); x = x + y; x.zeigDich(); system("PAUSE"); return(0); } Ausgabe: 10 KlausurZeit 10 KlausurZeit 29 KlausurZeitZeitKlausurZeit x = i(1+9), s(Klausur + Zeit) Ausgabe x y = i(9+10), s(Zeit + KlausurZeit) Ausgabe x x = i(10+19), s(KlausurZeit + ZeitKlausurZeit) Ausgabe x

Überladen von Operatoren (SS11 6.2) 1.2 Kommentieren Sie Syntax und Semantik der im Programm fett markierten Zeilen und verwenden Sie dabei programmiersprachliche Fachbegriffe. Klausur operator+(const Klausur &links, const Klausur &rechts) Funktion die den Operator + für Objekte vom Typ Klausur überlädt. Sie gibt ein Objekt vom Typ Klausur zurück und erwartet 2 Parameter, jeweils Referenzen vom Typ Klausur { Klausur tmp; Lokales Klausur Objekt, entsteht aus den Werten der Parameter-Objekte tmp.i = links.i + rechts.i; Attribut i des lokalen Objektes ist Summe der beiden Attribute i der Parameter-Objekte tmp.s = links.s + rechts.s; Attribut s des lokalen Objektes ist Summe der beiden Attribute s der Parameter-Objekte return(tmp); Lokales Objekt, befüllt mit Werten, wird zurückgegeben und ist Ergebnis der + Operation }

Überladen von Operatoren (SS11 6.3) 1.3 Erweitern Sie das Programm um den ==-Operator als externe Funktion. In dieser Funktion sollen die Attribute i und s beider Objekte miteinander verglichen werden. Die Ausgabe „gleich“ oder „nicht gleich“ soll direkt in der Methode erfolgen. Des Weiteren rufen Sie diesen Operator für die Objekte x und y im Hauptprogramm (main) auf. bool operator== (Klausur a, Klausur b){ if(a.i == b.i && a.s == b.s){ cout << „gleich“ << endl; return true; }else{ cout << „ungleich“ << endl; return false; } Nicht vergessen, in Klasse Klausur diese Funktion als friend deklarieren! class Klausur { private: … public: … friend bool operator==(Klausur,Klausur); … (Rückgabetyp: void oder bool möglich)

Überladen von Operatoren (SS11 6.3) 1.3 Erweitern Sie das Programm um den ==-Operator als externe Funktion. In dieser Funktion sollen die Attribute i und s beider Objekte miteinander verglichen werden. Die Ausgabe „gleich“ oder „nicht gleich“ soll direkt in der Methode erfolgen. Des Weiteren rufen Sie diesen Operator für die Objekte x und y im Hauptprogramm (main) auf. int main() { Klausur x(1, " Klausur "); Klausur y(9, " Zeit "); x = x + y; x.zeigDich(); y = y + x; x.zeigDich(); x = x + y; x.zeigDich(); x == y; system("PAUSE"); return(0); }

Überladen von Operatoren (WS10/11 5) 2. Gegeben ist folgende Klassendefinition class Geld { private: int Euro; public: int getEuro () { return Euro; } friend ostream& operator<< (ostream&, const Geld&); friend istream& operator>> (istream&, Geld&); Geld operator += (Geld r); }; istream& operator >> (istream& is, Geld& r) { cout<<"Euro eingeben "<<endl; cin>>r.Euro; return is;} ostream& operator<<(ostream& stream, Geld const& obj) { stream<<obj.Euro<<endl; return stream;} Geld Geld::operator += ( Geld r) { Euro += r.Euro; return *this;} bool operator == (Geld, Geld);

Überladen von Operatoren (WS10/11 5.1) 2.1 Wozu dient bei der Überladung des <<-Operators das Schlüsselwort friend ? Sonst könnte bei der Implementierung der Funktion nicht auf das Attribut Euro eines Objektes direkt zugegriffen werden, da dies als private definiert ist. (stream<<obj.Euro<<endl;)

Überladen von Operatoren (WS10/11 5.2) 2.2 Kommentieren Sie die fett gedruckten Programmzeilen. Erklären Sie dabei das Schlüsselwort this und gehen Sie darauf ein, warum bei der Überladung des +=- Operators nur ein Operand in der Parameterliste enthalten ist, bei der Überladung des Vergleichsoperators jedoch zwei Operanden angegeben werden müssen. Geld operator += (Geld r); Definition der Methode bzw. Prototyp der Methode in der Klasse Geld. Sie überschreibt den Operator +=, liefert ein Geld Objekt als Rückgabewert und verlangt ein Geld Objekt als Parameter. Geld Geld::operator += ( Geld r) Überladen des Operator += definiert in der Klasse(gehört zur Klasse Geld) { Euro += r.Euro; dem Attribut Euro des aktuellen Objektes wird der Wert des Attributes Euro vom Parameterobjekt r hinzuaddiert. return *this; Es wird über den Referenzzeiger this auf das aktuelle Objekt dieses Zurückgegeben }

Überladen von Operatoren (WS10/11 5.2) 2.2 Kommentieren Sie die fett gedruckten Programmzeilen. Erklären Sie dabei das Schlüsselwort this und gehen Sie darauf ein, warum bei der Überladung des +=- Operators nur ein Operand in der Parameterliste enthalten ist, bei der Überladung des Vergleichsoperators jedoch zwei Operanden angegeben werden müssen. Das Schlüsselwort this ist der Referenzzeiger auf das aktuelle Objekt. D.h. er zeigt auf das Objekt, „indem man sich gerade befindet“. Hier in der Methode operator+= zeigt der this Zeiger auf das Objekt, auf welches Diese Methode aufgerufen wurde. Da die Überladung von += innerhalb der Klasse geschieht, ist das Objekt vom Typ dieser Klasse immer der „linke“ Operand(this). Der „rechte“ Operand ist dann der Parameter/das Parameter-Objekt. Bei der Überladung von == ist die Methode außerhalb der Klasse definiert und kann somit nicht auf this als „linken“ Operand zurückgreifen, sondern braucht die Operanden jeweils als Parameter.