Funktionen und Parameter



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

Excel Funktionen durch eigene Funktionen erweitern.

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

Java Kurs für Anfänger Einheit 5 Methoden

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

Native Zeichenketten (C-Strings)

Vorkurs C++ Programmierung

Grundlagen. Kapitel 1

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

Die Programmiersprache C99: Zusammenfassung

Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung

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

Grundlagen von Python

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

Einführung in die Java- Programmierung

Eine Einführung in C-Funktionen

Objektorientierte Programmierung

Einführung in die Programmierung

Java: Vererbung. Teil 3: super()

Deklarationen in C. Prof. Dr. Margarita Esponda

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Übungen zu C++ Kapitel 1

Delegatesund Ereignisse

Objektbasierte Entwicklung

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

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Objektorientiertes Programmieren für Ingenieure

Innere Klassen in Java

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

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

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

Alltagsnotizen eines Softwareentwicklers

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

Javakurs 2013 Objektorientierung

Modellierung und Programmierung 1

Objektorientierte Programmierung. Kapitel 12: Interfaces

Programmierkurs Java

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Prinzipien Objektorientierter Programmierung

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

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber

Programmentwicklung mit C++ (unter Unix/Linux)

Java Virtual Machine (JVM) Bytecode

Einführung in die Programmierung

1 Vom Problem zum Programm

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

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Zählen von Objekten einer bestimmten Klasse

Algorithmen und Datenstrukturen

Klausur in Programmieren

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

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

Einführung in die Java- Programmierung

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

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Testen mit JUnit. Motivation

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

Grundlagen der Informatik - 6. Praktikum

Javakurs zu Informatik I. Henning Heitkötter

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

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

Vererbung & Schnittstellen in C#

Einführung in die Programmierung

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Informatik I (D-MAVT)

Übung zur Vorlesung Programmieren in C

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

Klausur in Programmieren

Software Engineering Klassendiagramme Einführung

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

C# im Vergleich zu Java

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

Einführung in die Programmierung (EPR)

C++ - Funktionen und mehr. Kerstin Gößner und Ralf Wondratschek

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

XML-Namensräume. Marc Monecke

1. Übung zu "Numerik partieller Differentialgleichungen"

Java Einführung Abstrakte Klassen und Interfaces

Tutorium Rechnerorganisation

Einleitung Grundlagen Erweiterte Grundlagen Zusammenfassung Literatur. C: Funktionen. Philip Gawehn

2. Programmierung in C

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Fakultät Angewandte Informatik Lehrprofessur für Informatik

DLLs (dynamic loaded libraries) mit MingW erstellen

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Übungsblatt 3: Algorithmen in Java & Grammatiken

Client-Server-Beziehungen

Der lokale und verteilte Fall

Einführung in die Programmierung für Wirtschaftsinformatik

Software Engineering Interaktionsdiagramme

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Objektorientierte Programmierung mit C++ Vector und List

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Klausur in Programmieren

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Transkript:

Funktionen in C++

Funktionen und Parameter Wie in Java: Parameter sind lokale Variablen Argumente werden bei Aufruf zugewiesen Extras: Zeiger-Parameter für alle Typen: als Rückgabewerte um große Kopien zu verhindern Referenz-Parameter machen den Zeiger-Mechanismus implizit Default-Parameter vorbesetzte Parameter machen Argumente optional Kommandozeilenparameter (optional) (c) schmiedecke 09 Info2-C++-Funktionen 2

Wdh: Zeiger-Parameter Zeiger-Parameter sind Ausgabe-Parameter ersparen das Kopieren großer Werte void translatepoint(int *x, int *y) { *x += deltax; *y += deltay; } struct Point { int x; int y }; Point A = { 12, 45 }; cout << A.x << " " << A.y << endl; translatepoint (&(A.x), &(A.y); cout << A.x << " " << A.y << endl; (c) schmiedecke 09 Info2-C++-Funktionen 3

Wdh: Referenz-Parameter Referenz-Parameter machen die Zeigeroperationen implizit: Parameter ist Alias des Arguments Deklaration als Referenz-Parameter Aufruf mit einfacher Variable als Argument Die Referenzierung (Adressermittlung) erfolgt implizit void translatepoint(point &alias) { alias.x += deltax; alias.y += deltay; } Point A = { 12, 45 }; cout << A.x << " " << A.y << endl; translatepoint (A); cout << A.x << " " << A.y << endl (c) schmiedecke 09 Info2-C++-Funktionen 4

void-zeiger Untypisierte Zeiger void *anypointer; int x = 4; char text[100]; anypointer = &x; anypointer = &text; Ermöglichen "typenoffene" Arrays und Funktionen: void *storage[1000]; void store (void *anydata) { storage[index++] = anydata; } // call as store(&mydata); Jede Dereferenzierung erfordert "Casting" *(char*)storage[2] = 'c'; int x = *(int *)storage[5]; (c) schmiedecke 09 Info2-C++-Funktionen 5

Rätsel: Was tut diese Funktion??? void memz (void *ptr, int length) { for(; length>0; length--) *(((char *)ptr) + length) = 0; } (c) schmiedecke 09 Info2-C++-Funktionen 6

Typische Verwendung: Knoteninhalt einer verketteten Liste struct Node { } void *content; Node *succ; Node *pred; Node *node;... *(double *)(node->succ->content) = 12.2; (c) schmiedecke 09 Info2-C++-Funktionen 7

Default-Parameter C++ erlaubt die Vorbesetzung von Parametern Bei Aufruf können Argumente weggelassen werden - es werden stattdessen die vorbesetzten Werte verwendet char *parse (char *text, char sep = ',', char finish = '/'); char csv[100]; cin >> csv; parse(csv, ' ', ' '); parse (csv,'+'); // parse(csv, '+', '/'); parse(csv); // parse(csv, ',', '/'); (c) schmiedecke 09 Info2-C++-Funktionen 8

Default-Parameter - Regeln Default-Belegung darf nur 1x deklariert werden Default-Parameter rechts von allen nicht vorbesetzten Parameter-Identifikation von links nach rechts, typtreu (c) schmiedecke 09 Info2-C++-Funktionen 9

Kommandozeilen-Parameter main hat eine zweite Signatur: int main(int argc, char *argv[]); argc Anzahl der Argumente mind. 1: der Programmname gilt als 1. Parameter! argv Array von Strings beim Aufruf durch Leerzeichen getrennt Konvertierungsfunktionen in <cstdlib> atoi String nach int atol String nach long int atof String nach double (c) schmiedecke 09 Info2-C++-Funktionen 10

Scope Wie in Java: Deklarationen innerhalb eines Blockes sind lokal: Lebensdauer: Blockausführung Sichtbarkeit: innerhalb des umgebenden Bloxks Extras: Es gibt einen globalen Gültigkeitsbereich: Deklaration außerhalb von Böcken. Lebensdauer = unbeschränkt (Programmausführung) Sichtbarkeit = unbeschränkt Namespace stellt keine Sichtbarkeitsschranke dar. static Lebensdauer lokaler Variablen kann unbeschränkt gesetzt werden Sichtbarkeit bleibt lokal! (c) schmiedecke 09 Info2-C++-Funktionen 11

Rückgabe von Zeigern Lebensdauer-Alarm! int *lieszahl () { int eingabe; cin >> eingabe; return &eingabe; } int *erzeugeliste() { int liste[10] = {999}; return liste; } int *lieszahl () { int *eingabe = new int; cin >> *eingabe; return eingabe; } int *erzeugeliste() { int liste[] = new int[10]; return liste; } char *liestext() { char eingabe[100]; cin >> eingabe; return eingabe; } char *liestext() { char eingabe[] = new char[100]; cin >> eingabe; return eingabe; } (c) schmiedecke 09 Info2-C++-Funktionen 12

Rückgabe von Referenzen Funktionen können Referenzen zurückgeben Referenzen sind unbenannte Variablen: können auf der linken Seite von Zuweisungen stehen werden automatisch dereferenziert, wenn der Wert benötigt wird (in Ausdrücken) Lebensdauer-Alarm wie bei Rückgabe-Zeigern! int ids[] = { 10, 11, 12, 13,14 } int &access(int index) { return ids[index]; } int main() { access(3) = 33; access(4) = 44; } (c) schmiedecke 09 Info2-C++-Funktionen 13

Deklaration und Definition In C++ gilt streng: Deklaration vor Benutzung Unterscheidung Deklaration Definition Typvereinbarung - Implementierung Deklaration darf beliebig oft wiederholt werden! Definition muss eindeutig sein (einmalig im Programm) Deklaration einer Funktion: Prototyp: int function(int, double*); Deklaration einer globalen Variablen: external char* username; (c) schmiedecke 09 Info2-C++-Funktionen 14

Header- und Implementierungsdateien (Programmierstil, nicht Spracheigenschaft) Menge der Deklarationen eines Moduls: Modul-Spezifikation Modul-Gliederung in zwei Dateien: Zusammenfassung der Deklarationen zur Header-Datei Dateiendung.h Zusammenfassung der Definitionen zur Implementierungs-Datei (aka "Source-Datei") Dateiendung.cpp (oder.c) Der Compiler benötigt zur Übersetzung nur die Header-Dateien der benutzten Moduln Nur die Header-Dateien werden eingebunden ("inkludiert"). (c) schmiedecke 09 Info2-C++-Funktionen 15

Getrennte Kompilation Main-Modul: Modul mit main-funktion (nur 1 pro Programm erlaubt!) wird übersetzt zur ausführbaren Datei ("Exe") weitere Dateien können nachgezogen werden c++ main.c main.h c++ -o main.exe main.c main.h # liefert a.out # liefert main.exe Anderes Modul: kann getrennt übersetz werden Ergebnis: Objekt-datei (.o) c++ -c modul1.c modul1.h modul2.h# liefert modul1.o (c) schmiedecke 09 Info2-C++-Funktionen 16

Funktionszeiger In C++ kann ein Zeiger nicht nur auf Daten, sondern auch auf eine Funktion verweisen der Typ ist "Zeiger auf Signatur" d.h. einem Zeiger können nur Funktionen gleicher Signatur zugewiesen werden int (*function)(int, char, char[]); // Variable "function" vom Typ // Zeiger auf int-funktion // mit (int, char, char[])-parametern (c) schmiedecke 09 Info2-C++-Funktionen 17

Verwendung von Funktionszeigern Funktionszeiger sind die C-Option für Funktionsvariation und Callback OO ist Polymorphie das Mittel der Wahl Trotzdem ist die "kleine Lösung mit Funktionszeigern manchmal eleganter und effizienter. Beispiel: "Generischer" Sortieralgorithmus mit void*-parametern Vergleichsfunktion für Elemente wird als Funktionszeiger mit übergeben. void sort(void *entries[ ], int length, int (*compare)(void*, void*)); Die als Argument übergebene Funktion kennt die tatsächlichen Parametertypen, muss aber mit void*-parametern definiert sein! (c) schmiedecke 09 Info2-C++-Funktionen 18

Funktionszeiger: Deklarieren, Besetzen, Aufrufen. int (*function)(int, char, char[]); // Variable "function" vom Typ // Zeiger auf int-funktion // mit (int, char, char[])-parametern int store(int index, char entry, char[] list) { list[index] = entry; } int iscontent(int any, char letter, char[] text) { return text[index]==letter; } // bool as int function = &store; // & is optional (*function)(10, 'C', mytext); // * is optional function = iscontent; int b = function(10, 'C', mytext); (c) schmiedecke 09 Info2-C++-Funktionen 19

Funktionsüberladung... wie in Java Wenn die Parameterlisten sich entscheidbar unterscheiden, kann der funktionsname mehrfach verwendet werden Unterschiedliche Funktionen an der Aufrufstelle unterscheidbar. void swap(&char c1, &char c2); void swap(double d1, double d2);... (c) schmiedecke 09 Info2-C++-Funktionen 20

Operatorüberladung... das kennt Java nicht! in C++ sind Operatoren Funktionen mit einem Symbol als Namen und einer zusätzliche Aufruf-Syntax... behandeln wir im Zusammenhang mit Klassen -- also nächstes Mal (c) schmiedecke 09 Info2-C++-Funktionen 21

Standardbibliotheken C++ hat reich bestückte Standardbibliotheken Recherchieren Sie bitte selbst ;) (c) schmiedecke 09 Info2-C++-Funktionen 22

... nächste Woche kommen die Objekte...