Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung...

25
Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik

Transcript of Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung...

Page 1: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Repetitorium PG105.09. - 09.09.2005

3: Gültigkeit, Sichtbarkeit & Operatorüberladung

FH-Darmstadt, FB Informatik

Page 2: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 2/25

Übersicht

• Gültigkeit / Sichtbarkeit

• Globale Variablen

• Operatorüberladung

• Aliasnamen

• ADT

• Arrays

Page 3: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 3/25

Gültigkeit- & Sichtbarkeitsbereich

• Sichtbarkeitsbereich (SB) einer Variablen:

Der Bereich eines Programms, in dem auf die Variable über ihren Namen zugegriffen werden kann.

• Gültigkeitsbereich (GB) einer Variablen:

Der Programmbereich, in dem für die Variable ein Speicherplatz reserviert ist, der ihren aktuellen Wert hält.

Page 4: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 4/25

Gültigkeit- & Sichtbarkeitsbereich

R1: Variable , die außerhalb von Blöcken definiert sind, bezeichnet man als globale oder externe Variablen. Ihr Sichtbarkeitsbereich ist die Datei bzw. das Programm (Wenn gesamtes Programm in dieser Datei enthalten ist!). Ihr Gültigkeitsbereich ist das gesamte Programm.

R2: Anweisungsblöcke können verschachtelt werden ({…{…}…}). Variablennamen sind auch gültig für innerhalb des Blocks neu angelegte Blöcke (Subblöcke).

Page 5: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 5/25

Gültigkeit- & Sichtbarkeitsbereich

R3: Innerhalb eines Anweisungsblocks definierte Variablen werden lokale oder automatische Variable genannt. Ihr Gültigkeits-bereich beginnt nach der Deklaration und endet mit dem Block, in dem sie eingebettet sind.

R4: Die Sichtbarkeit (visibility) einer Variablen (global oder lokal) ist eingeschränkt, wenn in einem Block/Subblock eine Variable gleichen Namens definiert wird. Im Sichtbarkeitsbereich der inneren Variablen ist die äußere Variable unsichtbar (d.h. sie kann nicht mehr über ihren Namen angesprochen werden) aber immer noch gültig (d.h. ihr Speicherplatz ist noch reserviert und enthält den aktuellen Wert).

Page 6: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 6/25

Globale Variablen (GVs)

GBs genießen keinen Zugriffsschutz.

Jeder kann überall im Programm auf sie

zugreifen Globale Variable sollten nur

für read-only (const) Variable verwendet

werden.

Page 7: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 7/25

Beispiel

int a=3, b=10;int gib_a() { return a;}int gib_c() { return c; }void main (){cout << a << endl;int a = 10;// lokales acout << a << endl;// Ausgabe 10; lokales a cout << ::a << endl; // Ausgabe 3; globales a // |-> Gültigkeitsbereich-Auswahloperator

Page 8: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 8/25

Erweiterung Sichtbarkeit G.V.

// Datei1.cpp (Anwendung)...int gFaktor = 2, gv;...

// Datei2.cpp...int gFaktor; // Fehler: Redefinitionextern int gFaktor //ok: Redeklaration...

Page 9: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 9/25

Übersicht

• Gültigkeit / Sichtbarkeit

• Globale Variablen

• Operatorüberladung

• Aliasnamen

• ADT

• Arrays

Page 10: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 10/25

Operatorenüberladung

übliche Operatoren:

+, -, /, *, %, (), [], <<, >>, <=, >=, =, ==, …

Page 11: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 11/25

Operatorenüberladung

• Es können keine neuen Operatoren erfunden werden• Linker Operand ist immer ein Objekt der Klasse• Die Operanden-Anzahl kann nicht geändert werden; ? unär

bleibt unär, binär bleibt binär• Der Vorrang eines Operators bleibt erhalten• Die Operatoren . , :: , .* , ?: und sizeof() sind nicht

überladbar• Soll der linke Operand kein Objekt einer Klasse sein, dann

muss eine Globale Operatorfunktion definiert werden. aber: der rechte Operand muss dann ein Klassenobjekt sein. Grund: für Standardtypen können die Operatoren nicht umdefiniert werden.

Page 12: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 12/25

Aliasnamen (Syntax zur Def.)

#define clock_t long //Preproz. ersetzt clock_t durch long im S-code wird häufig in Bibliotheken verwendet. //oder besser

typedef long clock_t;

// |Typ| Aliasname für Typ

#include <ctime>

void wait(double seconds) {

Page 13: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 13/25

Der Kommaoperator ,

• meist in for-Anweisung verwendet– Bsp.: for (int i = 0, j= 1; i<10; i++, j--){…}

• erlaubt dort mehrere Ausdrücke, wo syntaktisch nur ein Ausdruck stehen darf

• hat den niedrigsten Vorrang• wertet von links nach rechts aus• Gesamtausdruck• hat den Wert des ganz rechts stehenden

Ausdrucks

Page 14: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 14/25

Übersicht

• Gültigkeit / Sichtbarkeit

• Globale Variablen

• Operatorüberladung

• Aliasnamen

• ADT

• Arrays

Page 15: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 15/25

Abstract Data Types - ADT

• Eine Datenstruktur ist nur durch ihre Wertemenge definiert

• Ein ADT– ist definiert durch seine Wertemenge und die Operationen,

die auf dieser Wertemenge ausführbar sind.– verwaltet interne Datenstruktur mittels schreibender und

lesender Zugriffsoperationen (Akzessormethoden)– stellt dem Benutzer lediglich vorgegebene Operationen und

lesende Akzessormethoden, beschrieben z.B. durch die Schnittstelle, zur Verfügung.

Page 16: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 16/25

Abstract Data Types - ADT

• Ein ADT– verbirgt die Implementierung der Operationen und

die interne Datenstruktur vor dem Benutzer (Geheimnisprinzip).

– Diese sind, je nach Standpunkt, nicht wichtig, nicht sichtbar oder nicht beeinflussbar.

– können die Anwendbarkeit der Operationen an Vorbedingungen knüpfen.

– können in objektorientierten Programmen durch Klassen realisiert werden.

Page 17: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 17/25

Vorteil des ADTs

• Bei Änderung der internen Datenstruktur müssen nur die Zugriffsfunktionen angepasst werden.

Page 18: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 18/25

Arrays

• Zusammenfassung von Objekten desselben Typs• Größe wird zur Compile-Zeit festgelegt und ist zur

Laufzeit nicht veränderbar.• Definition von C-Arrays:

– <Datentyp><Arrayname>[<AnzahlElemente>];

• Beispiel int intArray[5];

• oder besserconst int MAX_I = 5;int intArray[MAX_I];

Page 19: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 19/25

Dekl. v. C-Arrays in Klassen

const int MAX_M=5; //globale Konstante ;-(

class ExamResult {int markRoster[5];//oder besserint markRoster[MAX_M];…};

Page 20: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 20/25

bessere Variante…

class ExamResult{public:

enum { MAX_M=5 };private:

int markRoster[MAX_M];};• Aufzählungstyp definiert symbolische Konstante 'MAX_M' mit

Gültigkeitsbereich 'ExamResult‚ (Andere Möglichkeit gibt es nicht!)• Zugriff auf Konstante 'MAX_M' im Namensbereich 'ExamResult' von

aussenvoid main(){

ExamResult math;if (ExamResult::MAX_M …)

}

Page 21: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 21/25

Array-Schutzfunktionen

• Schutzfunktionen müssen die Zugriffsfunktionen übernehmen. Dazu wird die benannte Konstante 'MAX_M' benötigt:

if ( i>=0 && i<MAX_M ) intArray[i] = 6;

Page 22: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 22/25

Arrays Kopieren/Größe

• Zuweisung elementweises Kopierenfor( int i=0 ; i<MAX_I ; i++ )

intArray1[i] = intArray2[i];

• Bestimmung der Array-Größe in Bytesdouble priceRoster[MAX_I]; //Ausgabe

cout << (sizeArray = sizeof(priceRoster)); //40

cout << (sizeDouble = sizeof(double)); //8

Page 23: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 23/25

Array als Funktionsparameter

void main(){ const int MAX_N = 1000; int randomNumber[Anzahl]; for (int i=0; i< MAX_N; i++) randomNumber[i] = rand(); cout << mean(randomNumber, MAX_N) << endl;}double mean( int array[], int MAX_N){ double sum(0); for( int n=0; i<MAX_N ; n++) sum += array[n]; return sum/MAX_N;}

Page 24: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 24/25

Array als Funktionsparameter

• Merke:– Für Arrays gibt es kein "call by value".– Arrays können nicht Ergebnistyp einer

Funktion/Methode sein (in Java schon!)

• Problem: – Wie schützt man Array-Elemente vor

unbeabsichtigter Modifikation durch eine Funktion?

Page 25: Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.

Rep. PG1 – Kap. 3: G,S & OU Dipl. Inf. (FH) Michael Krauß 25/25

Funktionen: Zufall und Zeit

• srand() – initialisiert Zufallszahlengenerator; sonst

erzeugt

• rand() – nach jedem Programmstart die gleiche

Zufallsfolge

• time(0) – liefert Sekunden seit 1.1.1970