11. Übung Informatik II - Operatorfunktionen



Ähnliche Dokumente
7. Übung Informatik II - Objektorientierte Programmierung

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Klassen mit Instanzmethoden

C-Programmierung: Ausdrücke und Operatoren#Division.2F

Angewandte Mathematik und Programmierung

Programmieren in C++ Überladen von Methoden und Operatoren

Einführung in die C++ Programmierung für Ingenieure

1. Erläutern Sie die Aufgaben von Datentypen in der imperativen Programmierung.

Operatoren in C. Gastvorlesung Andreas Textor

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

Einführung in die Programmierung mit C++

Algorithmen & Datenstrukturen

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Datentypen und Operatoren Ganzzahlige Numerische Datentypen Logischer Datentyp

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

Zusammenfassung des Handzettels für Programmieren in C

Programmieren 1 C Überblick

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

Dr. Monika Meiler. Inhalt

Zeiger. Zeiger ist eine Variable deren Wert eine Adresse enthält. Zeiger werden im Programm definiert. int *pmyinteger; Type *PointerName ;

Hydroinformatik I: Referenzen und Zeiger

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

Systemnahe Programmierung in C/C++

Repetitorium Programmieren I + II

Einstieg in die Informatik mit Java

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

Einstieg in die Informatik mit Java

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

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

10.4 Konstante Objekte

Grundlagen der Informatik 12. Strukturen

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

Grundlagen der Informatik

C-Programmierkurs Mathematik

Grundlagen der Informatik 2. Operatoren

Vererbung und Polymorphie

Kurze Einführung in die Programmiersprache C++ und in Root

1.2. Datentypen (Konstantentypen)

C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13

18. Bitmanipulationen. Bitoperationen Bitmasken

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

Algorithmen und Datenstrukturen

Überladen von Operatoren

Methoden und Wrapperklassen

Hydroinformatik I: Referenzen und Zeiger

C/C++-Programmierung

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Programmierung und Angewandte Mathematik

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

Probeklausur Name: (c)

C- Kurs 03 Ausdrücke und Operatoren

Einfache Datentypen in JAVA

Einstieg in die Informatik mit Java

Repetitorium Programmieren I + II

Informatik 1 ( ) D-MAVT F2010. Rekursion, Signaturen. Yves Brise Übungsstunde 8

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

Klassen. Kapitel Klassendeklaration

8. Referenzen und Zeiger

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

Standardbibliotheken. Datentyp bool. Eingaben 2/2. Eingaben 1/2. In C gibt es keinen logischen Datentyp

Schwerpunkte. 8. Ausdrücke, Operatoren (einfache Typen) Beispiel: Schaltjahr Test. Einführendes Beispiel: Grundprobleme

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

Informationsverarbeitung im Bauwesen

Peter Prinz Ulla Kirch-Prinz C+ + Lernen und professionell anwenden. ffl mitp

Einführung in die Programmierung

Einstieg in die Informatik mit Java

Teil 10: Operator Überladung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

Verwendung von Klassen in C++

Vorlesung 6: Operatoren, Logische Ausdrücke

Probeklausur: Programmierung WS04/05

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

3. Operatoren und Ausdrücke

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

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

Objektorientierte Programmierung mit C++ SS 2007

Objektorientierte Programmierung und Klassen

3. Operatoren und Ausdrücke

Konzepte der Programmiersprachen

Vorlesungsprüfung Programmiersprache 1

C++ Klassen weitere Funktionen

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

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

Quiz und Übungen. C++ Übung am 19. Mai 2016

Informatik 1 ( ) D-MAVT F2011. Klassen, Funktionen. Yves Brise Übungsstunde 9

Grundkurs C++ IDE Klassenhierarchien

Dynamische Datenstrukturen in C++ 150

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders

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

Kompilieren Datentypen Operatoren. Überblick. 1 Kompilieren. 2 Datentypen. const static volatile. 3 Operatoren. Alexander Batoulis

Grundkurs C++ IDE Klassenhierarchien

Einführung in die Programmierung

C-Vorrangregeln. Version Web:

MatLab Teil 2: weitere Operationen, Dateien und Bildformate

7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor

Die Programmiersprache C Eine Einführung

Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1

Transkript:

Stand: 26. Juni 2015

Inhalt 1 2 3

Übersicht 1 2 3

Warum Operatoren überladen? Großteil der Operatoren (Arithmetik, Logik, Vergleiche) nur für Standarddatentypen (Zahlen, Zeiger) implementiert vergleichbare Funktionalität muss für komplexe Datentypen (Strukturen, Objekte) über Funktionen gelöst werden Funktionsrufe teils weniger intuitiv, komplexere Anweisungen Operatoren können Funktionalität verständlicher ausdrücken

Übersicht 1 2 3

Was bedeutet Überladung? es existieren mehrere Funktionen mit gleichem Namen (die selbes Problem lösen) Funktionen unterscheiden sich durch Typ und/oder Anzahl der Parameter Rückgabetypen können verschieden sein, aber: verschiedene Rückgabetypen bei gleicher Parameterliste funktioniert nicht! jede Funktion auf Parameter angepasste Umsetzung Effekt: selber Name bezeichnet spezielle Realisierung für verschiedene Typen von Parametern Kompiler wählt bei Übersetzung passende Funktion aus

Beispiel I #include <iostream> using namespace std ; struct vec3 { double x,y, z; }; vec3 vmul(vec3 vektor, int skalar ){ vec3 result ; cout<< Multiplikation mit Integer <<endl ; result.x = vektor.x skalar ; result.y = vektor.y skalar ; result. z = vektor. z skalar ; return result ; } vec3 vmul(vec3 vektor, double skalar ){

Beispiel II } vec3 result ; cout<< Multiplikation mit Double <<endl ; result.x = vektor.x skalar ; result.y = vektor.y skalar ; result. z = vektor. z skalar ; return result ; double vmul(vec3 vektor1, vec3 vektor2){ cout<< Skalarprodukt <<endl ; double sp ; sp = vektor1.x vektor2.x; sp += vektor1.y vektor2.y; sp += vektor1. z vektor2. z; return sp ; } int main(){

Beispiel III vec3 v1, v2 ; double sp ; v1.x = 1.0; v1.y = 1.5; v1. z = 0.6; v2.x = 0.3; v2.y = 0.7; v2. z = 2.0; vmul(v1,2); vmul(v2,1.5); sp = vmul(vmul(v1,2), v2 ); cout<< Vektor1: <<v1.x<<, <<v1.y<<, <<v1.z<<endl ; cout<< Vektor2: <<v2.x<<, <<v2.y<<, <<v2.z<<endl ; cout<< Skalarprodukt : <<sp<<endl ; } return 0;

Welche Operatoren sind überladbar? I Fast alle Operatoren können überladen werden: Arithmetik: +,,, /, % (Divisionsrest - Modulo) Zuweisung: = Inkrement/Dekrement: ++, Vergleiche: ==,!=, >, <, >=, <= Elementzugriff: [] kombinierte Operation und Zuweisung: +=, =, =, /=, %=, &=, =, ˆ=, <<=, >>= Schiebeoperator: << (Ausgabe bzw. bitweise Verschiebung), >> (Eingabe bzw. bitweise Verschieb Logik: &&,,! (Nicht) Bitoperationen: ˆ (XOR), (OR), & (AND), (Komplement)

Welche Operatoren sind überladbar? II Typkonvertierungen Auch möglich, aber selten genutzt (und teils komplex): Funktionsruf: () Referenz, Dereferenz, Pfeiloperator: &,, > Komma:, dynamischer Speicher: new, new[], delete, delete[]

Umsetzung I allgemein: Schlüsselwort operator gefolgt von zu überladendem Operator bei Operatoren für dynamischen Speicher und Typkonvertierungen mit Leerzeichen zwischen operator und Operator (z.b. operator new(std:: size t size)) bei Typkonvertierungen: kein Rückgabetyp!

Operatortypen I Zwei Typen werden unterschieden: unäre Operatoren (@x bzw. x@), arbeiten auf nur einer Variablen: ohne Argument: Inkrement/Dekrement (Präfix - ++i), Nicht, Komplement, Referenz, Dereferenz, Pfeiloperator, Typkonvertierungen mit einem Argument: Inkrement/Dekrement (Postfix - i ++), Elementzugriff, dynamischer Speicher mit beliebiger Anzahl Argumente: Funktionsruf binäre Operatoren (x@y), arbeiten auf zwei Variablen: alle anderen

Operatortypen II Argumente unärer Operatoren: Postfix Inkrement/Dekrement: Integer Pseudoargument, um Unterscheidung von Präfixoperator zu ermöglichen Elementzugriff: Integer, angegebener Index dynamischer Speicher: new, new[]: std:: size t, Größe des anzulegenden Elements in Byte delete, delete []: void, Zeiger auf freizugebendes Element Funktionsruf: Funktionsparameter

Freunde Klassen können Freunde haben, die auf private (auch protected) Elemente zugreifen dürfen Freunde können andere Klassen oder Funktionen sein Freundschaft ist einseitig: wenn Klasse B Freund von Klasse A ist, muss dies nicht umgekehrt auch so sein! Definition von Freunden in Klassendefinition mit Schlüsselwort friend plus Name Klasse/Funktion, welche Freund sein soll

Übersicht 1 2 3

Definition der Operatorfunktionen I Operatorfunktionen können global oder als Klassenmethode definiert werden falls für ein Objekt global und als Klassenmethode vorhanden wird Klassenmethode verwendet! Aufbau global: Operanden als erste Parameter unäre Operatoren: <Rtyp> operator@(<typx> x) binäre Operatoren: <Rtyp> operator@(<typx> x,<typy> y) Aufbau Klassenmethode von TypX: unäre Operatoren: <Rtyp> operator@(), Methode wird auf x aufgerufen binäre Operatoren: <Rtyp> operator@(<typy> y), Methode wird auf x aufgerufen

Definition der Operatorfunktionen II Einschränkungen/Anmerkungen: für einige Operatoren nur als Klassenmethode möglich: Zuweisung, Elementzugriff, Funktionsruf, Pfeiloperator Verschiebeoperatoren für Ein- und Ausgabe können nicht als Klassenmethoden implementiert werden für die meisten Operatoren Definition als Klassenmethode sinnvoll, da meist Zugriff auf private Elemente Reihenfolge wichtig: für x@y kann andere Funktion erforderlich sein als für y@x! falls x Standarddatentyp nur globale Funktion möglich! arithmetische und logische Operatoren sollten Element mit berechneten Werten zurück geben, um Verkettung von Operatoren zu erlauben

Definition der Operatorfunktionen III Objekte sollten als Referenz übergeben werden, um implizite Kopien zu vermeiden Referenzparameter, die von Funktion nicht verändert werden, sollten mit const markiert werden teilt Kompiler mit, dass sie nicht verändert werden, kann Probleme vermeiden

Beispiel Aufgrund des Umfangs separat als Quellcode verfügbar: operatoren.cpp