Article View: de.comp.lang.c++
Article #932Probleme mit statischen Variablen in Methoden von Klassen.
From: 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.
=========================================================================
Technical Details
Message-ID:
<uzs198.225.01416FE7@uni-bonn.de>Path:
arc1-ca.pugleaf.net!rhrz.uni-bonn.de!uzs198Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!rhrz.uni-bonn.de!uzs198 From: uzs198@uni-bonn.de (Nik Wiesel) Newsgroups: de.comp.lang.c++ Subject: Probleme mit statischen Variablen in Methoden von Klassen. Date: Sat, 2 Dec 1995 17:24:01 UNDEFINED Organization: Private Message-ID: <uzs198.225.01416FE7@uni-bonn.de> NNTP-Posting-Host: rhrz-ts2-p12.rhrz.uni-bonn.de X-Newsreader: Trumpet for Windows [Version 1.0 Rev B]