Article View: de.comp.lang.c++
Article #969Re: Probleme mit statischen Variablen in Methoden von Klassen.
From: Jens Ittel [ET]
Date: Thu, 07 Dec 1995 12:47
Date: Thu, 07 Dec 1995 12:47
52 lines
2767 bytes
2767 bytes
Nik Wiesel wrote: > > Hallo, > ich habe hier ein problem mit der Handhabung statischer Variablen in Methoden > von Klassen. Ich habe dazu mal nachfolgendes Beispielprogramm erstellt. > Die Klasse A enthaelt die Methode Test. In dieser Methode wird eine statische > Integervariable definiert. > Hier stellt sich fuer mich folgendes Problem: Wenn nun mehre Instanzen dieser > Klasse erzeugt werden und die Methode der jeweiligen Instanz aufgerufen wird, > dann nutzen alle Methoden dieser Klasse die selbe(!) Variable obwohl die > statische definition lokal(!) innerhalb der Methode erfolgte und nicht > innerhalb der Klasse. Wenn die statische Variable innerhalb der Klasse > definiert wΓΌrde, waere auch mir klar, dass alle Instanzen die selbe statische > Variable nutzen wuerden. > Wieso geschieht dies auch wenn die statische Variable lokal in einer Methode > definiert wird? > > Anstatt wie erwartet in den Klammern vier mal eine (1) auszugeben wird von 1 > bis 4 hochgezaehlt. Es wird also die selbe variable genutzt. [ Beispiel gelosecht] > Nik Wiesel: UZS198@UNI-BONN.DE Hallo Nik, Ich habe auf die schnelle zwar nichts im Stroustrup gefunden, aber ein paar grundsaetzliche Gedanken helfen Dir vielleicht weiter. - Was Du haben willst (je Methode und Exemplar eine individuelle Variable) ist nichts anderes als eine Exemplarvariable. Nur das Du sie an einer anderen Stelle definieren wolltest. - Eine Methode mit Zustand ist eigentlich wieder ein eigenstaendiges Objekt. - Die statischen Variablen in der Methode (wie von Dir beschrieben) sind damit Speicherbereiche die von allen Exemplaren einer Klasse geteilt werden und damit in den meisten Faellen wohl nicht sinnvoll zu verwenden. Ich vermute, dass das Verhalten eng mit der Realisierung von C++ zusammenhaengt. Der Code fuer eine Methode ist fuer alle Exemplare nur einmal da. Deshalb gilt dies auch fuer den (static) Speicher. Als Parameter bekommt die Methode die Adresse des Datenbereichs des Exemplars. Der eigentliche Grund duerfte aber ein historischer sein: statische Variablen in Funktionen funktionieren genauso ... Tschau Jens
Technical Details
Message-ID:
<30C6E244.167E@student.uni-kl.de>Path:
arc1-ca.pugleaf.net!sun.rhrk.uni-kl.de!newsReferences:
<uzs198.225.01416FE7@uni-bonn.de>Show Full Headers
Complete Article Headers
Newsgroups: de.comp.lang.c++ Path: arc1-ca.pugleaf.net!sun.rhrk.uni-kl.de!news From: "Jens Ittel [ET]" <ittel@student.uni-kl.de> Subject: Re: Probleme mit statischen Variablen in Methoden von Klassen. Content-Type: text/plain; charset=iso-8859-1 To: Nik Wiesel <uzs198@uni-bonn.de> Message-ID: <30C6E244.167E@student.uni-kl.de> Sender: news@rhrk.uni-kl.de Content-Transfer-Encoding: 8bit Organization: University of Kaiserslautern, Germany References: <uzs198.225.01416FE7@uni-bonn.de> Mime-Version: 1.0 Date: Thu, 7 Dec 1995 12:47:00 GMT X-Mailer: Mozilla 2.0b3 (X11; I; OSF1 V3.2 alpha)