kramann.info
© Guido Kramann

Login: Passwort:










Informatik3
1 Vom_struct_zur_Klasse
..1.1 Vom_struct_zur_Klasse
..1.2 struct_Programm
..1.3 Klassen_Programm
..1.4 Offene_Fragen
..1.5 Historie
..1.6 Objektabstraktion
..1.7 OO_Kundenverwaltung
..1.8 Objektfaehigkeiten
..1.9 Formatierung
..1.10 Motivation
..1.11 Uebung1
..1.12 Uebung2
2 UML
..2.1 Volumenberechnung
..2.2 UML_Klassendiagramm
..2.3 Konstruktor
..2.4 Statische_Variable
3 Strings
..3.1 Klassenbibliotheken
..3.2 stringUML
..3.3 Uebung3
4 Initialisierungen
4 bluej
5 Zeiger_und_Arrays
..5.1 Zeiger
..5.2 Zeiger_und_Funktion
..5.3 Uebung4
6 Vererbung
..6.1 MesswerteUML
..6.2 MesswerteProgramm
..6.3 VererbungsProgramm
..6.4 Vector
..6.5 Uebung
7 Modifikatoren
..7.1 public_Vererbung
..7.2 protected_Vererbung
8 Listen_und_Templates
..8.1 Containertypen
....8.1.1 ListeUML
....8.1.2 ListeProgramm
..8.2 Templates
....8.2.1 Listentemplate
....8.2.2 STLvectorTemplate
..8.3 Uebung5
..8.4 Uebung6
..8.5 Uebung7
9 Java
..9.1 Uebung
..9.2 GettingStarted
..9.3 Animation
..9.4 Hybrid
..9.5 Threads
10 Delegation
11 LayoutProjekt
12 Fenster
13 Uebung
14 Zwischenprojekt
..14.1 Befehle
..14.2 Planung
..14.3 JNI
..14.4 JNIumsetzen
..14.5 Anwendungsklasse
..14.6 GUI01
..14.7 GUI02
15 Rasterlayout
..15.1 Bilder_Packages
..15.2 interfaces
..15.3 ArrayList
..15.4 clone
..15.5 Uebung
16 Nuetzliches
..16.1 Threads
..16.2 Animation
..16.3 RungeKutta
..16.4 Loesungsansatz
..16.5 Internetprogrammierung
....16.5.1 Codegenerierung
....16.5.2 PHP_Programmierung
....16.5.3 PHP_OOP
....16.5.4 Java
17 Algorithmen
..17.1 RungeKutta
..17.2 Loesungsansatz
..17.3 Evoopt
..17.4 Uebung12
..17.5 Uebung8_2014
..17.6 Ausdruecke
18 Uebung10
19 UML_ALT
..19.1 Flaechenberechnung
..19.2 UML_Flaechenberechnung
..19.3 Implementierung
..19.4 ListeUML
..19.5 ListenImplementierung
..19.6 Anwendung

2.4 Verwendung statischer Variablen

  • Das nun folgende Beispiel ist kurz, aber etwas kompliziert.
  • Wir wollen es analysieren, indem wir zuerst den Konstruktor betrachten und dann die Variable nr.
  • Doch lassen wir es zunächst einfach auf uns wirken:
C++ Programm mit Konstruktor und statischer Variable nr

Bild 2.4-1: C++ Programm mit Konstruktor und statischer Variable nr.

Konsolenausgabe

Bild 2.4-2: Konsolen-Ausgabe nach Aufruf.

Beispiel konstruktor2.cpp gezipt

Der leere Konstruktor

  • Der Konstruktor-Methode in obigem Beispiel werden keine Parameter übergeben.
  • Ein solcher Konstruktor heißt leerer Konstruktor
  • In C++ entfallen beim Aufruf des leeren Konstruktors die runden Klammern.
  • Dass der Konstruktor tatsächlich beim Erzeugen der Objekte mit Zylinder kleinerZylinder, grosserZylinder; aufgerufen wird, sehen wir an der Konsolenausgabe:
  • Das Programm verlangt erst die Eingabe der Attribute für das erste Objekt und dann die für das zweite, genauso, wie es in dem Konstruktor codiert ist.

Die statische Variable nr

  • Bisher hatten wir nur Objekt-Attribute und Objekt-Methoden kennengelernt.
  • Beispiele waren Radius und Höhe eines Zylinders, Abmessungen eines Quaders, eine Methode zur Volumenberechnung und Rückgabe etc.
  • All diesen Attributen und Methoden ist gemeinsam, dass jeweils etwas anderes zurückgeben, oder beinhalten, je nachdem für welches Objekt sie mit dem Punkt-Operator aufgerufen werden.
  • Das Volumen für Zylinder kleinerZylinder ist ein anderes, als das für grosserZylinder.
  • Demgemäß liefert kleinerZylinder.berechneVolumen() auch eine andere Zahl, als grosserZylinder.berechneVolumen().
  • Was aber macht man, wenn man eine Variable, oder eine Methode haben möchte, die für alle Instanzen (Objekte) der Klasse gleich sein soll?
  • In diesem Fall erzeugt man sich eine statische Methode / ein statisches Attribut.
  • Mit dem Attribut nr soll gespeichert werden, wieviele Objekte bisher erzeugt wurden.
  • Das heißt sie soll unabhängig von den erzeugten Objekte nur einmal existieren und sie soll der Klasse, nicht dessen Objekten zugehören.
  • Weil das so ist, kann sie nach jedem Konstruktor-Aufruf um eins erhöht werden und behält ihren Wert.
  • Die Syntax, um die in der Klasse deklarierte statische Variable zu initialisieren, ist in C++ etwas umständlich und erfolgt mit der Zeile int Zylinder::nr=0; außerhalb der Klasse.
  • Nichtsdestotrotz ist die Variable nr keine globale Variable.
  • Der doppelte Doppelpunkt mit dem vorangestellten Klassennamen zeigt die Zugehörigkeit an.
  • Man könnte sie von der main-Methode aus dann verändern, wenn man sie in den public-Bereich der Klasse stellen würde.

UML-Klassendiagramm mit statischer Variable und leerem Konstruktor

UML-Klassendiagramm

Bild 2.4-2: UML-KLassendiagramm der Klasse Zylinder mit leerem Konstruktor und statischer Variable nr.