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



Ähnliche Dokumente
C++ - Funktionen und mehr -

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

Einführung in die Programmierung

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

Vorkurs C++ Programmierung

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

Grundlagen. Kapitel 1

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

Grundlagen von Python

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

Java Kurs für Anfänger Einheit 5 Methoden

Einführung in die Programmierung (EPR)

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

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

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

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

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

Programmieren in Java

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

Objektorientierte Programmierung

Objektbasierte Entwicklung

Eine Einführung in C-Funktionen

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

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

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

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

Objektorientiertes Programmieren für Ingenieure

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

Die Programmiersprache C99: Zusammenfassung

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

Einführung in die C-Programmierung

1 Vom Problem zum Programm

Programmierkurs Java

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

Propädeutikum. Dipl.-Inf. Frank Güttler

Deklarationen in C. Prof. Dr. Margarita Esponda

Modellierung und Programmierung 1

Javakurs 2013 Objektorientierung

Excel Funktionen durch eigene Funktionen erweitern.

Objektorientierte Programmierung mit C++ Vector und List

Klausur in Programmieren

Einführung in die Programmierung

Angewandte Mathematik und Programmierung

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

Informatik I (D-MAVT)

Software Engineering Interaktionsdiagramme

Klausur in Programmieren

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Zählen von Objekten einer bestimmten Klasse

Vererbung & Schnittstellen in C#

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Grundlagen der Informatik - 6. Praktikum

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

Objektorientierte Programmierung. Kapitel 12: Interfaces

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Delegatesund Ereignisse

Programmierkurs Java

FB Informatik. Fehler. Testplan

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

teischl.com Software Design & Services e.u. office@teischl.com

Programmentwicklung mit C++ (unter Unix/Linux)

Übungen zu C++ Kapitel 1

Alltagsnotizen eines Softwareentwicklers

Klausur in Programmieren

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

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

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Automatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu)

Installation und Inbetriebnahme von Microsoft Visual C Express

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Einführung in die Programmierung mit C++

Einführung in die Java- Programmierung

SEP 114. Design by Contract

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

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

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Übungspaket 19 Programmieren eigener Funktionen

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

Inhalt. meliarts. 1. Allgemeine Informationen Administration Aufruf Das Kontextmenü Vorlagen...

3 Objektorientierte Konzepte in Java

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmieren Tutorium

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

Wirtschaftsinformatik I

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

Typumwandlungen bei Referenztypen

13 OOP MIT DELPHI. Records und Klassen Ein Vergleich

Prozeß P1 Prozeß P2. Zur Synchronisation stehen den beiden Prozessen binäre Semaphore und die beiden Funktionen

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Informatik. Studiengang Chemische Technologie. Michael Roth WS 2012/2013. Hochschule Darmstadt -Fachbereich Informatik-

Java: Vererbung. Teil 3: super()

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

Native Zeichenketten (C-Strings)

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

Projektverwaltung Problem Lösung: Modulare Programmierung

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl

Innere Klassen in Java

Transkript:

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

Übersicht Deklaration, Definition und Initialisierung Variablen- und Konstantendeklaration Funktionsaufrufe und rückgabewerte Technische Grundlage eines Funktionsaufrufs Headerdateien Gültigkeitsbereiche (Scopes) Namensbereiche Using-Deklaration Main-Funktion C++ - Funktionen und mehr 2

Deklaration, Definition und Initialisierung C++ - Funktionen und mehr 3

Funktion Unter einer Funktion versteht man ein Unterprogramm, das eine bestimmte Aufgabe erfüllt. Eine Funktion ist eine Ansammlung von Anweisungen, der ein Name gegeben wird und die jederzeit im Programm über diesen Namen aufgerufen und ausgeführt werden kann. Eine Funktion ist praktisch ein Unterprogramm, das Daten verarbeitet und einen Wert zurückgibt. C++ - Funktionen und mehr 4

Prozedur Was ist mit Prozeduren? Sind vorhanden, jedoch keine strenge Unterscheidung zu einer Funktion. Es gibt keine explizite Trennung. C++ - Funktionen und mehr 5

Problem?! void a() { //... b(); //... void b() { //... c(); //... void c() { //... a(); //... void b() { //... c(); //... void c() { //... a(); //... void a() { //... b(); //... void c() { //... a(); //... void a() { //... b(); //... void b() { //... c(); //... C++ - Funktionen und mehr 6

Deklaration Eine Deklaration ist eine Anweisung, die einem Namen einen Gültigkeitsbereich einführt und einen Typ für das benannte Element und optional einen Initialisierer angibt. Variablen: <extern> [Typ][Name]<Initialisierer> ; Funktionen: [Rückgabetyp][Name] ( <Liste formaler Argumente>); C++ - Funktionen und mehr 7

Deklaration - Beispiele Variablen: int i; static int j = 0; extern double k; Funktionen: double foo(); double foo(double a, double b); double foo(const int& a); C++ - Funktionen und mehr 8

Deklaration - Fortsetzung Leicht erklärt: Eine Deklaration gibt dem Compiler an, dass es etwas gibt! In Headerdateien zu finden Schnittstellen, die an anderer Stelle definiert sind Fehlerhaftes Beispiel: int main() { cout << fib(number) << endl; C++ - Funktionen und mehr 9

Definition Eine Definition ist eine Deklaration, die das Element vollständig spezifiziert. Sie gibt an, worauf sich ein Name konkret bezieht. Für Definitionen wird Speicher reserviert. Keine doppelten Definitionen, mehrfache konsistente Deklarationen sind dagegen möglich. Variablen: [Typ][Name]<Initialisierer> ; Funktionen: [Rückgabetyp][Name] ( <Liste formaler Argumente>) { <Anweisungen> C++ - Funktionen und mehr 10

Initialisierung Eine Initialisierung ist implizit eine Definition. Durch eine Initialisierung wird eine Variable mit einem bestimmten Wert vorbelegt. Beispiel: int i = 5; Vorsicht: extern int i = 5; Dabei handelt es sich um eine Initialisierung, dennoch muss i an anderer Stelle definiert werden, da hier i keinen Speicher zugewiesen bekommt. C++ - Funktionen und mehr 11

Gegenüberstellung - Beispiele Deklaration: Definition: Initialisierung: extern int i; int i; int i = 5; void foo(); void foo(){ C++ - Funktionen und mehr 12

Variablen- und Konstantendeklaration C++ - Funktionen und mehr 13

Konstantendeklaration Erweitert normale Variablendeklaration mit dem Schlüsselwort const. const [Typ][Name]<Initialisierer> ; Beispiel: const int i = 5; C++ - Funktionen und mehr 14

Spätes Initialisieren Möglichst vermeiden, doch manchmal unumgänglich. Warnung vor Spaghetti-Code! bool isrunning = true; //... int value; if (isrunning) { value = 9; else { value = 7; C++ - Funktionen und mehr 15

Standardinitialisierung Standardkonstruktor bei String, Vector Beispiel: == string s = ""; string s; Vorsicht bei eingebauten Typen, z.b. int und double: Global automatisch mit 0 initialisiert Lokal und als Klassenmember jedoch nicht C++ - Funktionen und mehr 16

Funktionsaufrufe und -rückgabewerte C++ - Funktionen und mehr 17

Funktionsaufrufe und -rückgabewerte Deklaration: [Rückgabetyp][Name] ( <Liste formaler Argumente> ); Definition: [Rückgabetyp][Name] ( <Liste formaler Argumente> ) { <Anweisungen> C++ - Funktionen und mehr 18

Rückgabewerte Wenn eine Funktion mit einem Rückgabewert deklariert wurde, braucht der Funktionrumpf stets eine return Anweisung. Die Rückgabe muss dem Rückgabetyp entsprechen. Vorsicht bei Verschachtelungen, Rückgabe nicht vergessen! Kein Rückgabetyp mit Schlüsselwort void. C++ - Funktionen und mehr 19

Rückgabewerte - Beispiele void checkrunning(bool isrunning){ if (isrunning) { return; else { std::cout << "is not running" << std::endl; int getrandomnumber() { return 4; C++ - Funktionen und mehr 20

Ausdrucksstarke Namen selbstkommentierend Konventionen einhalten A foo(double a) { //... return k; Circle getcircle (double radius) { //... return circle; C++ - Funktionen und mehr 21

C++ - Funktionen und mehr 22

Liste formaler Argumente auch als Parameter bezeichnet Unterschiede bei Deklaration möglich: int fibonacci(int number); int fibonacci(int); Für Compiler kein Unterschied C++ - Funktionen und mehr 23

Parameter weglassen? int find1 (string text, int value, int hint) { int position = 0; //... return position; int find2 (string text, int value, int) { int position = 0; //... return position; find1("15845985", 9, 5); // Aufruf korrekt find2("15845985", 9, 5); // Aufruf nicht korrekt C++ - Funktionen und mehr 24

Überladen von Funktionen int find (string text, int value) { int position = 0; //... return position; int find (string text, int value, int hint) { int position = 0; //... return position; find("15845985", 9); // Aufruf obere Funktion find("15845985", 9, 5); // Aufruf untere Funktion Zuordnung der Funktion anhand deren Signatur. Signatur besteht aus dem Namen und den Parametern, jedoch nicht dem Rückgabetyp! C++ - Funktionen und mehr 25

C++ - Funktionen und mehr 26

C++ - Funktionen und mehr 27

Pass-by-value Kopie der Variable wird übergeben Parameter entsprechen lokalen Variablen Einfach und effizient für kleine Werte int fib(int value) { if (value == 0) { return 0; else if (value == 1) { return 1; else { return fib(value - 1) + fib(value - 2); C++ - Funktionen und mehr 28

Pass-by-reference Übergibt Referenz statt Kopie des Objekts Wird signalisiert durch kaufmännisches Und (&) Ändern von Objekten erlaubt Sinnvoll zum Beispiel bei Initialisierungsmethoden, zum Sortieren etc. Aliase möglich int i = 5; int& k = i; i++; k++; std::cout << i << " == " << k << std::endl; //7 == 7 C++ - Funktionen und mehr 29

Pass-by-const-reference Übergibt Referenz des Objektes, jedoch wird das Objekt nie verändert Sinnvoll zum Beispiel zum Ausgeben eines Vektors void makebinary(const int value, string& result) { if (value == 1) { result.insert(0, "1"); else { if (value % 2 == 1) { result.insert(0, "1"); else { result.insert(0, "0"); makebinary(value / 2, result); C++ - Funktionen und mehr 30

Was verwenden? 1.) Pass-by-value bei nur sehr kleinen Objekten verwenden. 2.) Stets pass-by-const-reference für große Objekte, die nicht verändert werden müssen, verwenden 3.) Lieber Ergebnisse zurückgeben statt Referenzobjekte zu verändern. 4.) Pass-by-reference nur im Notfall verwenden. C++ - Funktionen und mehr 31

Argumentüberprüfung und -umwandlung Übergeben eines Arguments bedeutet implizit Initialisieren der Parameter mit den übergebenen Argumenten. Typumwandlungen sind möglich, aber mit Vorsicht zu genießen! bool ispositive (const int value) { return value >= 0; int main() { cout << ispositive(-0.9) << endl; //1 C++ - Funktionen und mehr 32

Technische Grundlage eines Funktionsaufrufs C++ - Funktionen und mehr 33

Implementierung von Funktionsaufrufen Bei einem Funktionsaufruf wird eine Datenstruktur eingerichtet. Function activation record beinhaltet: Parameter / lokale Variablen Implementierungsdetails - Kosten für Aktivierung nicht von Größe abhängig. - Datensätze voneinander unabhängig (sonst Probleme bei Rekursion) - Stack wächst und schrumpft nach dem LIFO Prinzip Beispiel Auruf von: fib(3); C++ - Funktionen und mehr 34

Implementierung von Funktionsaufrufen value := 3 Implementierungsdetails int fib(int value) { if (value == 0) { return 0; else if (value == 1) { return 1; else { return fib(value - 1) + fib(value - 2); C++ - Funktionen und mehr 35

Implementierung von Funktionsaufrufen value := 3 Implementierungsdetails value := 2 Implementierungsdetails int fib(int value) { if (value == 0) { return 0; else if (value == 1) { return 1; else { return fib(value - 1) + fib(value - 2); C++ - Funktionen und mehr 36

Implementierung von Funktionsaufrufen value := 3 Implementierungsdetails value := 2 Implementierungsdetails value := 1 int fib(int value) { if (value == 0) { return 0; else if (value == 1) { return 1; else { return fib(value - 1) + fib(value - 2); Implementierungsdetails C++ - Funktionen und mehr 37

Implementierung von Funktionsaufrufen value := 3 Implementierungsdetails value := 2 Implementierungsdetails int fib(int value) { if (value == 0) { return 0; else if (value == 1) { return 1; else { return fib(value - 1) + fib(value - 2); C++ - Funktionen und mehr 38

Implementierung von Funktionsaufrufen value := 3 Implementierungsdetails value := 2 Implementierungsdetails value := 0 int fib(int value) { if (value == 0) { return 0; else if (value == 1) { return 1; else { return fib(value - 1) + fib(value - 2); Implementierungsdetails C++ - Funktionen und mehr 39

Implementierung von Funktionsaufrufen value := 3 Implementierungsdetails value := 2 Implementierungsdetails int fib(int value) { if (value == 0) { return 0; else if (value == 1) { return 1; else { return fib(value - 1) + fib(value - 2); C++ - Funktionen und mehr 40

Implementierung von Funktionsaufrufen value := 3 Implementierungsdetails int fib(int value) { if (value == 0) { return 0; else if (value == 1) { return 1; else { return fib(value - 1) + fib(value - 2); C++ - Funktionen und mehr 41

Implementierung von Funktionsaufrufen value := 3 Implementierungsdetails value := 1 Implementierungsdetails int fib(int value) { if (value == 0) { return 0; else if (value == 1) { return 1; else { return fib(value - 1) + fib(value - 2); C++ - Funktionen und mehr 42

Implementierung von Funktionsaufrufen value := 3 Implementierungsdetails int fib(int value) { if (value == 0) { return 0; else if (value == 1) { return 1; else { return fib(value - 1) + fib(value - 2); C++ - Funktionen und mehr 43

Headerdateien C++ - Funktionen und mehr 44

Headerdateien Wichtiges Mittel zur Verwaltung von Deklarationen und Definitionen Benutzung von fremden Implementierungen wie sqrt() oder cout möglich Arbeitsersparnis Übernehmen von bereits implementierten Elementen C++ - Funktionen und mehr 45

Was genau ist ein Header? Ein Header ist eine Datei mit einer Zusammenfassung vieler Deklarationen. Endung: [filename].h Zugehörige Definitionen befinden sich in anderen Dateien mit.cpp Endung. Einfügen von Headerdateien in den Quelltext mit Hilfe von #include Beispiel: #include <stdlib.h> C++ - Funktionen und mehr 46

#include Eine #include [filename.h] Anweisung entspricht dem Kopieren von Textzeilen aus der Datei filename.h. Bearbeitung von #include Zeilen vor allen anderen Schritten ist Zwang sog. Präprozessor-Direktive Einfügen von #include in Dateien mit Definitionen und Dateien mit Verwendung der Deklarationen. C++ - Funktionen und mehr 47

#include - Beispiel std_lib_facilities.h enthält Deklarationen von Elementen der Standardbibliothek (cout, vector, sqrt(), ) #include "std_lib_facilities.h"; using namespace std; int main() { double a = sqrt(4); cout << a; //Ausabe: 2 using namespace std; int main() { double a = sqrt(4); cout << a; //error C3861: "sqrt": Bezeichner wurde nicht gefunden //error C2065: 'cout': nichtdeklarierter Bezeichner C++ - Funktionen und mehr 48

Gültigkeitsbereiche (Scopes) C++ - Funktionen und mehr 49

Gültigkeitsbereiche (scopes) Scope = bestimmter Abschnitt in Programmcode Wurden Namen im Scope deklariert, sind diese bis Ende des Scopes gültig ( in scope ). Namen aus einem Gültigkeitsbereich sind auch in seinen eingeschlossenen Scopes sichtbar. Globaler Gültigkeitsbereich steht über allen anderen C++ - Funktionen und mehr 50

Gültigkeitsbereiche - Beispiel #include <iostream> using namespace std; void g() { int x = 4; int y = x * x; cout << y << " "; void h() { int y = 0; cout << y << " "; //g(): y ist nur in g() gültig (genauso für h()) int main() { g(); h(); //Ausgabe: 16 0 C++ - Funktionen und mehr 51

Arten von Scopes 1. Globaler Gültigkeitsbereich liegt außerhalb jedes anderen Scopes 2. Namensbereich 3. Klassenbereich 4. Lokaler Gültigkeitsbereich 5. Anweisungsbereich C++ - Funktionen und mehr 52

Namensbereich explizit benannter Scope liegt innerhalb des globalen Scopes oder anderem Namensbereich namespace Namespace1 { namespace Namespace2 { void f() { cout << "Hallo!"; void main() { f(); // error C3861: "f": Bezeichner wurde nicht gefunden. C++ - Funktionen und mehr 53

Namensbereich Richtiger Aufruf eines im Namensbereich definierten Elementes namespace Namespace1 { namespace Namespace2 { void f() { cout << "Hallo!"; void main() { Namespace1::Namespace2::f(); //Ausgabe: Hallo! C++ - Funktionen und mehr 54

Klassenbereich Gültigkeit nur innerhalb einer Klasse class MyClass1 { public: void f() { cout << "Hallo!"; ; class MyClass2 { public: void f() { cout << "Hallo!"; ; //beide Methosen können den gleichen Namen haben, da //sie in unterschiedlichen Klassen definiert sind C++ - Funktionen und mehr 55

Lokaler Gültigkeitsbereich Gültig in Bereich zwischen {-Klammern eines Blocks oder einer Funktion void main() { bool a = true; if (a) { int x = 4; cout << x; else { int x = 5; cout << x; x = x + 1; cout << x; // error C2065: 'x': nichtdeklarierter Bezeichner C++ - Funktionen und mehr 56

Lokaler Gültigkeitsbereich Beheben des Problems void main() { int x; bool a = true; if (a) { x = 4; cout << x << '\t ; else { x = 5; cout << x << '\t ; x = x+1; cout << x << '\t ; //Ausgabe: 4 5 C++ - Funktionen und mehr 57

Anweisungsbereich Deklaration im Kopf der for-schleife Gültig nur innerhalb der for-schleife for (int i = 1; i < 10; i++) { cout << "i: " << i << " \t"; i = 4; // error C2065: 'i': nichtdeklarierter Bezeichner C++ - Funktionen und mehr 58

Aufgabe von Scopes Namen lokal halten, damit Kollisionen vermieden werden. void f() { int x = 4; cout << x << "\t"; void g() { int x = 4; ++x; cout << x << "\t"; f(); //lokale Deklaration //Ausgabe: 4 5 4 int x = 4; void f() { cout << x << "\t"; void g() { ++x; cout << x << "\t"; f(); //globale Deklaration //Ausgabe: 4 5 5 Problem bei globaler Deklaration: x wird verändert schwierig zu warten schnell unvorhergesehene Ergebnisse C++ - Funktionen und mehr 59

Regeln Namen so lokal wie möglich halten! Keine Kollision mit gleichnamigen Elementen anderer Programmierer Je länger der Gültigkeitsbereich, desto aussagekräftiger der Name! Beispiel: i nicht als globalen Namen verwenden (Bedeutung unklar), allerdings als Zählvariable für Schleifen ist i sinnvoll. So wenig globale Variablen wie möglich benutzen Programme werden deutlich übersichtlicher Achtung! Namen von Blöcken / Anweisungen können Gültigkeit verlieren ( go out of scope ) C++ - Funktionen und mehr 60

Verschachtelung C++ -Konstrukte, die Scopes definieren, sind selbst in Scopes eingeschlossen 1. Funktionen innerhalb von Klassen (Memberfunktionen) 2. Klassen in Klassen (Memberklassen, eingebettete Klassen ) 3. Klassen innerhalb von Funktionen (lokale Klasse) 4. Funktionen innerhalb von Funktionen (lokale Funktionen, eingebettete Funktionen ) 5. Blöcke innerhalb von Funktionen oder anderen Blöcken (verschachtelte Blöcke) nicht zu vermeiden C++ - Funktionen und mehr 61

Memberfunktionen häufigster Fall class myclass{ public: void f() { //do something void g() { //do something else ; //beide Funktionen in Klasse //definiert class myclass{ public: void f(); void g() { //do something else ; void myclass::f() { //do something //eine Funktion in Klasse //definiert, eine in Klasse //deklariert und außerhalb //definiert C++ - Funktionen und mehr 62

Memberklassen nur für Implementierung komplizierter Klassen hilfreich class MyClass { class MyMemberClass { class AnotherMemberClass { //... //... //... C++ - Funktionen und mehr 63

Lokale Klasse Vermeiden! Unübersichtlich, Funktionen werden zu lang void f() { //... class MyClass { //... ; //... class MyClass2 { //... ; //... C++ - Funktionen und mehr 64

Eingebettete Funktionen nicht erlaubt in C++, Zurückweisung durch Compiler void f() { //... void g() { //... //... // error C2601: 'g': Lokale Funktionsdefinitionen sind // unzulässig C++ - Funktionen und mehr 65

Namensbereiche C++ - Funktionen und mehr 66

Namensbereiche C++ bietet ein Sprachelement zur Definition von Scopes an: namespace Eine namespace ist eine Gruppierung von Deklarationen. Zusammenfassen von Klassen, Funktionen, Daten und Typen zu einem benannten Teil eines Programms C++ - Funktionen und mehr 67

Namensbereiche - Beispiel namespace Grapics { struct Color {/*...*/; struct Shape {/*..*/; struct Line:Shape {/*...*/; struct Funtion:Shape {/*...*/; struct Text:Shape {/*...*/; //... int gui_mai() {/*...*/; //die Elemente sind alle im Namensbereich Graphics definiert C++ - Funktionen und mehr 68

Namensbereiche Problem: Verwendung von globalen Namensbereich Kollision bei Gleichbenennung zweier Klassen Verwendung von namespace (Bibliothek) keine Kollision bei gleichen Namen in unterschiedlichen Bibliotheken Vollqualifizierter Name: [name_of_namespace]::[name_of_member] C++ - Funktionen und mehr 69

Beispiel von Seite 54//55 namespace Namespace1 { namespace Namespace2 { void f() { cout << "Hallo!"; void main() { f(); // error C3861: "f": // Bezeichner wurde nicht // gefunden. namespace Namespace1 { namespace Namespace2 { void f() { cout << "Hallo!"; void main() { Namespace1::Namespace2::f(); //Ausgabe: Hallo! C++ - Funktionen und mehr 70

Using-Deklaration C++ - Funktionen und mehr 71

Using-Deklaration Schreiben von vollqualifizierten Namen dauert bei häufiger Verwendung lange. Festlegung: using [name_of_namespace]::[name_of_member] bedeutet immer name_of_member Beispiel: std::string name; using std::string; //string bedeutet nun immer std::string string name2; C++ - Funktionen und mehr 72

Using-Direktive using-deklaration nicht ausreichend bei vielen Elementen im namespace Verwendung von using-direktive Deklaration aus namespace wird immer benutzt, wenn keine Deklaration im aktuellen Scope existiert Befehl: using namespace [name_of_namespace]; Beispiel: using namespace std; C++ - Funktionen und mehr 73

Using-Direktive Verwendung möglichst nur bei Namensbereichen wie std (weitverbreitet) sonst Gefahr von Unübersichtlichkeit Using-Deklaration übersichtlicher, da expliziter Schlechte Angewohnheit: using-direktive in Headerdatei (kein Umgehen möglich) Empfehlung: using namespace std; in std_lib_facilities platzieren (Schreibarbeit) C++ - Funktionen und mehr 74

Main-Funktion C++ - Funktionen und mehr 75

Main-Funktion Main = normale Funktion mit dem Privileg, dass sie als Erstes ausgeführt wird Parameterüber- und Rückgabe möglich Aufruf von main ist gleichzusetzen mit Start von Programm Funktionsparameter müssen von außen übergeben werden Programmstart in Shell: hinter dem Programmnamen angegebene Parameter werden als Funktionsparameter übernommen Programmstart von grafischer Oberfläche: mit der Wahl von verschiedenen Einstellungen können Funktionsparameter erzeugt werden C++ - Funktionen und mehr 76

Parameter der Main-Funktion Unterschiedliche Anzahl von zu übergebenden Parametern an die Main-Funktion ist möglich Funktionskopf: void main(int argc, char **argv) argc Integer, Anzahl der übergebenen Parameter 1. Parameter ist Programmname selbst, auch wenn sonst keine weiteren Parameter existieren argc >= 1 argv Zeiger auf einen char-zeiger char **argv gleichbedeutend mit char *argv[] (Zeiger auf ein Feld von char- Zeigern ist gleichbedeutend einem Zeiger auf ein Element) C++ - Funktionen und mehr 77

Rückgabewerte der Main-Funktion Main ist auch in der Lage, Parameter zurück zu geben int main(int argc, char **argv) Normalerweise ist Rückgabewert unwichtig, Ausnahme: Benutzen einer Batch-Datei Batch-Datei = Textdatei, in der hintereinander alle Befehle stehen, die abgearbeitet werden sollen In Batch-Datei kann auf Rückgabe des Programms reagiert werden Rückgabe von 0: erfolgreiches Beenden Rückgabe von Wert!= 0: Fehler, Abbruch der Batch-Datei in den meisten Fällen Mit return muss der Wert zurückgegeben werden C++ - Funktionen und mehr 78

Quellen Einführung in die Programmierung mit C++ - Bjarne Stroustrup C++ Programmierung André Willms Internetquellen (Zuletzt geprüft am 03.05.2011 10 Uhr): http://de.wikibooks.org/wiki/c%2b%2b- Programmierung/_Weitere_Grundelemente/_Prozeduren_und_Funktionen http://de.wikibooks.org/wiki/c++-programmierung:_variablen_und_konstanten http://www.c-plusplus.de/forum/61231 http://www.highscore.de/cpp/einfuehrung/funktionen.html http://www.informit.de/books/c++21/data/kap05.htm http://www.imb-jena.de/~gmueller/kurse/c_c++/c7up.html C++ - Funktionen und mehr 79