07.10.2013 Aufrufe

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

c○ Prof. Dr. B. Bartning, HS <strong>Emden</strong>/<strong>Leer</strong> Rumpfskript ” Informatik I/II“ (WS/SS 2010/11) 81<br />

muss jedoch wissen, was der Name bedeuten soll – spätestens beim ersten Funktionsaufruf.<br />

Dazu dient eine Funktionsdeklaration; sie führt den Namen ein, teilt dem Compiler mit,<br />

welche Parameter und welchen Rückgabetyp die Funktion hat.<br />

Funktionsdeklarationen werden in C ++/C sehr häufig benutzt, selbst dann wenn sie vermeidbar<br />

wären, weil die Definition vor dem ersten Gebrauch geschehen könnte.<br />

(7.23) 10/11 FunktionsDeklaration <br />

12/14 RückgabeTyp 30/32,Alt.4 FunktionsBezeichner ( ParameterDekl.-LISTEopt ) ;<br />

Eine Funktionsdeklaration ist syntaktisch einer Funktionsdefinition sehr ähnlich, s. (7.11a),<br />

nur statt des Funktionsblockes (ZusammengesetzteAnweisung) steht ein Semikolon.<br />

Mit der Funktionsdeklaration erhält der Compiler die Information über:<br />

• Funktionsname,<br />

• Signatur der Funktion (Anzahl, Typ, Reihenfolge der Parameter),<br />

• Rückgabetyp.<br />

Es fehlt ihm hier nur noch die Information über die Einsprungadresse in die Funktion, s.<br />

(7.14c). Diese Einsprungadresse muss später eingesetzt werden, und zwar<br />

• durch den Compiler, wenn die Definition später in der gleichen Programmdatei erfolgt,<br />

• durch den Linker, wenn die Funktion woanders definiert wird.<br />

Bsp Deklaration aller Funktionen aus Beispielprogramm (7.13):<br />

int wertPlus1(int wert);<br />

int summe(int par1, int par2);<br />

int zahlFest();<br />

void intDruck(int wert);<br />

Anm1 In den Headerdateien sind viele Funktionsdeklarationen vorhanden, z. B.<br />

: get, getline;<br />

: strcpy, strcat, strlen.<br />

Anm2 In einer Deklaration (i. a. nicht in einer Definition) ist es erlaubt, den Namen – nicht den<br />

Typ – der formalen Parameter wegzulassen.<br />

Empfehlung: Namen nicht weglassen, da (hoffentlich!) die Bedeutung der Parameter beschreibend<br />

( ” selbstdokumentierender Name“).<br />

Beispiel:<br />

double potenz(double basis, double exp); // empfohlen<br />

double potenz(double, double); // erlaubt - aber Bedeutung der Par.?<br />

Anm3 Eine Funktionsdeklaration darf mehrfach vorhanden sein, solange sich die Deklarationen<br />

nicht widersprechen (Übereinstimmung Name, Signatur, Rückgabetyp – Parameternamen<br />

dürfen unterschiedlich sein; eine unterschiedliche Signatur führt zu unterschiedlichen Funktionen,<br />

vgl. (7.61)). Eine Deklaration ist auch erlaubt, wenn die Funktion nicht aufgerufen<br />

wird. Eine Funktionsdefinition dagegen darf nur genau einmal auftreten; wenn die Funktion<br />

nicht benutzt wird, darf sie auch fehlen.<br />

↑↑ Bei virtuellen Elementfunktionen (einer Klasse) muss auch dann eine Definition vorhanden<br />

sein, wenn die Elementfunktion nicht benutzt wird, siehe (11.42 ↑↑1).<br />

Anm4 C △! Wenn kein Parameter vorhanden ist, dann sollte in der Definition und in der Deklaration<br />

auf jeden Fall statt<br />

RückgabeTyp FunktionsName() // leere Parameterliste<br />

besser folgendes geschrieben werden:<br />

RückgabeTyp FunktionsName(void)<br />

7.3 Referenztyp<br />

Die Schreibweise mit void ist auch in C++ erlaubt, aber nicht nötig; in C ist sie sehr<br />

wichtig, da die Schreibweise mit leerem Klammernpaar aus historischen Gründen eine andere<br />

Bedeutung hat (Funktion mit einer nicht näher spezifizierten Anzahl von Parametern).<br />

(7.30) Übb Durch eine Referenz wird zu einer bereits existierenden Variablen ein Synonym erzeugt,<br />

d. h. ein zusätzlicher Name, der auf denselben Speicherplatz wie der Originalname<br />

verweist. In diesem Unterkapitel wird allgemein gezeigt, wie in C ++ eine Referenz erzeugt

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!