1 / 25

Repetitorium PG1 05.09. - 09.09.2005

Repetitorium PG1 05.09. - 09.09.2005. 3: Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik. Übersicht. Gültigkeit / Sichtbarkeit Globale Variablen Operatorüberladung Aliasnamen ADT Arrays. Gültigkeit- & Sichtbarkeitsbereich.

ismail
Download Presentation

Repetitorium PG1 05.09. - 09.09.2005

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Übersicht • Gültigkeit / Sichtbarkeit • Globale Variablen • Operatorüberladung • Aliasnamen • ADT • Arrays Dipl. Inf. (FH) Michael Krauß

  3. 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. Dipl. Inf. (FH) Michael Krauß

  4. 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). Dipl. Inf. (FH) Michael Krauß

  5. 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). Dipl. Inf. (FH) Michael Krauß

  6. 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. Dipl. Inf. (FH) Michael Krauß

  7. Beispiel :: Scope Operator 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 Dipl. Inf. (FH) Michael Krauß

  8. Erweiterung Sichtbarkeit G.V. // Datei1.cpp (Anwendung) ... int gFaktor = 2, gv; ... // Datei2.cpp ... int gFaktor; // Fehler: Redefinition extern int gFaktor //ok: Redeklaration ... Dipl. Inf. (FH) Michael Krauß

  9. Übersicht • Gültigkeit / Sichtbarkeit • Globale Variablen • Operatorüberladung • Aliasnamen • ADT • Arrays Dipl. Inf. (FH) Michael Krauß

  10. Operatorenüberladung übliche Operatoren: +, -, /, *, %, (), [], <<, >>, <=, >=, =, ==, … Dipl. Inf. (FH) Michael Krauß

  11. 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. Dipl. Inf. (FH) Michael Krauß

  12. 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> voidwait(double seconds) { Dipl. Inf. (FH) Michael Krauß

  13. 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 Dipl. Inf. (FH) Michael Krauß

  14. Übersicht • Gültigkeit / Sichtbarkeit • Globale Variablen • Operatorüberladung • Aliasnamen • ADT • Arrays Dipl. Inf. (FH) Michael Krauß

  15. Abstract Data Types - ADT • Eine Datenstruktur ist nur durch ihre Wertemenge definiert • Ein ADT • ist definiert durch seineWertemenge 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. Dipl. Inf. (FH) Michael Krauß

  16. 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. Dipl. Inf. (FH) Michael Krauß

  17. Vorteil des ADTs • Bei Änderung der internen Datenstruktur müssen nur die Zugriffsfunktionen angepasst werden. Dipl. Inf. (FH) Michael Krauß

  18. 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 besser const int MAX_I = 5; int intArray[MAX_I]; Dipl. Inf. (FH) Michael Krauß

  19. Dekl. v. C-Arrays in Klassen const int MAX_M=5; //globale Konstante ;-( class ExamResult { int markRoster[5]; //oder besser int markRoster[MAX_M]; … }; Dipl. Inf. (FH) Michael Krauß

  20. 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 …) } Dipl. Inf. (FH) Michael Krauß

  21. 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; Dipl. Inf. (FH) Michael Krauß

  22. 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 Dipl. Inf. (FH) Michael Krauß

  23. 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; } Dipl. Inf. (FH) Michael Krauß

  24. 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? mit "const" übergeben Dipl. Inf. (FH) Michael Krauß

  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 Dipl. Inf. (FH) Michael Krauß

More Related