🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #932

Probleme mit statischen Variablen in Methoden von Klassen.

#932
From: Nik Wiesel
Date: Sat, 02 Dec 1995 17:24
90 lines
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!uzs198

Show 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]