Code: Alles auswählen
void Foo::Bar() {
static int i = 2;
}
Code: Alles auswählen
void Foo::Bar() {
static int i = 2;
}
Diese Variable ist für alle Objekte dieser Klasse statisch. Das habe ich mich nämlich auch mal gefragt, denn auf den ersten Blick wäre es so "logisch". Allerdings kannst du mit einer Membervariable eigentlich genau das gewünschte Verhalten erreichen.Jside hat geschrieben:Ist eine statische Variable in einer funktion innerhalb einer Klasse nur für diese Instanz, oder für alle Object'e der Klasse statisch?
Code: Alles auswählen
void Foo::Bar() { static int i = 2; }
Code: Alles auswählen
#include <stdio.h>
class foo
{
char const* Name;
public:
void bar( )
{
static int a = 0;
printf( "%s: %d\n", Name, a );
a++;
}
foo( char const * name ) : Name(name) {}
};
int main( void )
{
foo a( "Eins" );
foo b( "Zwei" );
a.bar();
b.bar();
a.bar();
b.bar();
}[/quote]
Was passiert: Kompilierte Funktionen sind immer (!) statisch, auch wenn es Methoden sind. Ihre "Dynamik" erhalten sie durch die tatsache, dass sie an ein Objekt gebunden sind - hier also foo. Wie sieht das dann in Wirklichkeit aus? Die statische Funktion bar hat einen Parameter, der als Methode versteckt ist.
[code] void bar( class foo * this )
Code: Alles auswählen
#include <stdio.h>
template<typename T> class foo
{
char const* Name;
public:
void bar( )
{
static int a = 0;
printf( "%s: %d\n", Name, a );
a++;
}
foo( char const * name ) : Name(name) {}
};
int main( void )
{
foo<int> a( "Eins" );
foo<double> b( "Zwei" );
foo<int> c( "Drei" );
a.bar();
b.bar();
c.bar();
a.bar();
b.bar();
c.bar();
}