Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Repetitorium PG1 05.09. - 09.09.2005 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik."—  Präsentation transkript:

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

2 Rep. PG1 – Kap. 3: G,S & OUDipl. Inf. (FH) Michael Krauß2/25 Übersicht Gültigkeit / Sichtbarkeit Globale Variablen Operatorüberladung Aliasnamen ADT Arrays

3 Rep. PG1 – Kap. 3: G,S & OUDipl. 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.

4 Rep. PG1 – Kap. 3: G,S & OUDipl. 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).

5 Rep. PG1 – Kap. 3: G,S & OUDipl. 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).

6 Rep. PG1 – Kap. 3: G,S & OUDipl. 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.

7 Rep. PG1 – Kap. 3: G,S & OUDipl. 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 a cout << a << endl;// Ausgabe 10; lokales a cout << ::a << endl; // Ausgabe 3; globales a // |-> Gültigkeitsbereich-Auswahloperator

8 Rep. PG1 – Kap. 3: G,S & OUDipl. Inf. (FH) Michael Krauß8/25 Erweiterung Sichtbarkeit G.V. // Datei1.cpp (Anwendung)... int gFaktor = 2, gv;... // Datei2.cpp... int gFaktor; // Fehler: Redefinition extern int gFaktor //ok: Redeklaration...

9 Rep. PG1 – Kap. 3: G,S & OUDipl. Inf. (FH) Michael Krauß9/25 Übersicht Gültigkeit / Sichtbarkeit Globale Variablen Operatorüberladung Aliasnamen ADT Arrays

10 Rep. PG1 – Kap. 3: G,S & OUDipl. Inf. (FH) Michael Krauß10/25 Operatorenüberladung übliche Operatoren: +, -, /, *, %, (), [], >, =, =, ==, …

11 Rep. PG1 – Kap. 3: G,S & OUDipl. 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.

12 Rep. PG1 – Kap. 3: G,S & OUDipl. 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 void wait(double seconds) {

13 Rep. PG1 – Kap. 3: G,S & OUDipl. 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

14 Rep. PG1 – Kap. 3: G,S & OUDipl. Inf. (FH) Michael Krauß14/25 Übersicht Gültigkeit / Sichtbarkeit Globale Variablen Operatorüberladung Aliasnamen ADT Arrays

15 Rep. PG1 – Kap. 3: G,S & OUDipl. 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.

16 Rep. PG1 – Kap. 3: G,S & OUDipl. 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.

17 Rep. PG1 – Kap. 3: G,S & OUDipl. Inf. (FH) Michael Krauß17/25 Vorteil des ADTs Bei Änderung der internen Datenstruktur müssen nur die Zugriffsfunktionen angepasst werden.

18 Rep. PG1 – Kap. 3: G,S & OUDipl. 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: – [ ]; Beispiel int intArray[5]; oder besser const int MAX_I = 5; int intArray[MAX_I];

19 Rep. PG1 – Kap. 3: G,S & OUDipl. 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 besser int markRoster[MAX_M]; … };

20 Rep. PG1 – Kap. 3: G,S & OUDipl. 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 aussen void main(){ ExamResult math; if (ExamResult::MAX_M …) }

21 Rep. PG1 – Kap. 3: G,S & OUDipl. 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;

22 Rep. PG1 – Kap. 3: G,S & OUDipl. Inf. (FH) Michael Krauß22/25 Arrays Kopieren/Größe Zuweisung elementweises Kopieren for( int i=0 ; i<MAX_I ; i++ ) intArray1[i] = intArray2[i]; Bestimmung der Array-Größe in Bytes double priceRoster[MAX_I]; //Ausgabe cout << (sizeArray = sizeof(priceRoster)); //40 cout << (sizeDouble = sizeof(double)); //8

23 Rep. PG1 – Kap. 3: G,S & OUDipl. 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; }

24 Rep. PG1 – Kap. 3: G,S & OUDipl. 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?

25 Rep. PG1 – Kap. 3: G,S & OUDipl. 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


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

Ähnliche Präsentationen


Google-Anzeigen