Thread View: de.comp.lang.c++
5 messages
5 total messages
Started by Nik Wiesel
Sat, 02 Dec 1995 17:24
Probleme mit statischen Variablen in Methoden von Klassen.
Author: Nik Wiesel
Date: Sat, 02 Dec 1995 17:24
Date: Sat, 02 Dec 1995 17:24
90 lines
3590 bytes
3590 bytes
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.
Antworten bitte auch an mich senden:
uzs198@uni-bonn.de
Danke...
//*******************************************************
// C++ Beispiel: Mit BC++ 4.52
//*******************************************************
#include <CONIO.H>
#include <STDIO.H>
//*******************
// Klasse deklarieren
//*******************
class A {
public: // Elemente oeffentlich machen
A(void); // Konstruktor deklarieren (immer Klassenname)
~A(void); // Destruktor deklarieren (immer ~Klassenname)
void Test(void); // Methode lokal für Datei deklarieren
// static hat bei Funktionen anders als bei
// Variablen nur die Beschraenkung des
// Bezugsrahmens auf die Datei zur Folge.
};
//********************
// Methoden definieren
//********************
A::A(void) { // Konstruktor definieren
printf("Konstruktor!");
};
A::~A(void) { // Destruktor definieren
printf("Destruktor!");
};
void A::Test(void) { // Methode definieren
static int W=0; // Statische Variable
printf("(%d)\n",++W); // Wert ausgeben
};
//**************
// Hauptprogramm
//**************
void main() {
//---------------------------------------------------------------------------
clrscr(); // Bildschirm loeschen
//---------------------------------------------------------------------------
A Klasse1,Klasse2; // Zwei Instanzen der Klasse A erzeugen
Klasse1.Test(); // Ohne Klammern = NOP
Klasse2.Test();
//---------------------------------------------------------------------------
{ // Neuen Bereich erzeugen
// Zwei Instanzen der Klasse A erzeugen
A Klasse1,Klasse2;
// Mit dem gleichen Namen wie ausserhalb
// des Bereichs!!!
Klasse1.Test();
Klasse2.Test();
}; // Bereich beenden
//---------------------------------------------------------------------------
getch();
};
------------------------------
Nik Wiesel: UZS198@UNI-BONN.DE
=========================================================================
The above statement is my own opinion and does not represent the point of
view of any organization I am related to.
=========================================================================
Re: Probleme mit statischen Variablen in Methoden von Klassen.
Author: Bernd Eggink
Date: Mon, 04 Dec 1995 12:51
Date: Mon, 04 Dec 1995 12:51
35 lines
2051 bytes
2051 bytes
Nik Wiesel (uzs198@uni-bonn.de) 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. [ ... ] Stell es Dir so vor: Methodenfunktionen sind Teil der Klasse, nicht des Objekts - es gibt immer nur 1 Exemplar davon (waere ja auch grauenhaft, wenn der Code einer Funktion so oft im Speicher stuende, wie es Objekte der Klasse gibt). Alles weitere ergibt sich daraus. Gruss Bernd -- +----------------------------------+ | Bernd Eggink | | Rechenzentrum Uni Hamburg | | admin@rzaix13.rrz.uni-hamburg.de | +----------------------------------+
Re: Probleme mit statischen Variablen in Methoden von Klassen.
Author: 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
Re: Probleme mit statischen Variablen in Methoden von Klassen.
Author: Hans-Ch. Eckert
Date: Thu, 07 Dec 1995 14:33
Date: Thu, 07 Dec 1995 14:33
54 lines
2361 bytes
2361 bytes
In <uzs198.233.00682EC7@uni-bonn.de>, uzs198@uni-bonn.de (Nik Wiesel) writes:
] Ich moechte lokale statische Variablen in einer Methode definieren. Diese
] sollen aber bei den jeweiligen Instanzen der Klasse unabhaengig sein. Jede
] Methode innerhalb der unterschiedlichen Instanzen soll also bei einem erneuten
] Aufruf ihren Wert vom Vorigen Aufruf behalten. Dieser soll aber unabhaengig
] von weiteren Instanzen der Klasse sein.
Es gibt zum einen Membervariablen. Deren Werte sind statisch gegenueber
Methodenaufrufen und global innerhalb der Klasse, d.h. allen Methoden
bekannt. Jede Instanz der Klasse hat ihre eigene Kopie der Membervariablen,
so dass sich die Werte zwischen verschiedenen Instanzen nicht beeinflussen.
// Beispiel
class foo
{
int mFooMember;
public:
foo() { mFooMember = 0; }
int method( int i ) { return mFooMember += i; }
};
int main()
{
foo f1;
foo f2;
int val1 = 0;
int val2 = 0;
val1 = f1.method(1); // val1=1
val2 = f2.method(2); // val2=2
val1 = f1.method(2); // val1=3 (1+2)
val2 = f2.method(3); // val2=4 (2+2)
val1 = f1.method(3); // val1=6 (3+3)
return val1+val2; // Addition gegen Optimierung...
}
Zum anderen gibt es auch noch statische Variablen bezueglich einer
Klasse. Diese enthalten dann Werte, die ueber alle Objekte hinweg
gleich sind.
int foo::classVar;
Gruss,
Ripley
--
Hans-Ch. Eckert, Regensburger Str.2, 10777 Berlin, Germany * ISO 8859-1
(intl) ripley@nostromo.in-berlin.de, * Ä Ö Ü
Alternative: ripley@cs.tu-berlin.de * aeoeuess
NeXTmail: hansagia@w271zrz.zrz.tu-berlin.de (and nowhere else!) * ä ö ü ß
Re: Probleme mit statischen Variablen in Methoden von Klassen.
Author: Karl-Heinz Krause
Date: Sat, 09 Dec 1995 12:02
Date: Sat, 09 Dec 1995 12:02
16 lines
1440 bytes
1440 bytes
Am 5. Dez 1995 schrieb Nik Wiesel (uzs198@uni-bonn.de): > Ich moechte lokale statische Variablen in einer Methode definieren. Diese > sollen aber bei den jeweiligen Instanzen der Klasse unabhaengig sein. Jede > Methode innerhalb der unterschiedlichen Instanzen soll also bei einem erneuten > Aufruf ihren Wert vom Vorigen Aufruf behalten. Dieser soll aber unabhaengig > von weiteren Instanzen der Klasse sein. > Deshalb versuchte ich dies ueber die lokale Definition der Variablen > innerhalb der jeweiligen Methode, was aber leider nicht funktionierte. Nein, das funktioniert nicht, weil eben statische Variablen einer Funktion (dazu zählen auch Methoden) nur einmal je Prozeß existieren und nicht einmal je Instanz. Was Du benötigst sind ordinäre Membervariablen. Karl-Heinz Krause
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads