Desværre har c++ bamsen Bjarne valgte at kalde ting som:
static int i;
som en statisk member variabel,
når man i et objekt-orienteret miljø ville kalde sådan
en erklræring for:
en klasse attribut (classifier).
Man kan da godt have en classifier attribut med kun
operations "scope":
class test
{
public: void Host (CString objekt_navn);
};
void test::Host ()
{
static int i =0;
cout << objekt_navn << ":" << i << endl;
i++;
}
Men man skal være forsigtig med brugen af sådan en,
da det kan give sjov sideeffekter:
void main()
{
test Test1;
test Test2:
test Test3;
Test1.Host("test1");
Test2.Host("test2");
Test1.Host("test1");
Test3.Host("test3");
}
Så får man udskriften:
test1:0
test2:1
test1:2
test3:3
Attributten test::Host::i tilhører selve operationen,
og hverken klassen eller den specifikke objekt.
Hilsen Fabio
"Rasmus Toftdahl Olesen" <halfdan@halfdan.dyndns.org> skrev i en meddelelse
news:87u1ykhwo4.fsf@halfdan.i-did-not-set--mail-host-address--so-shoot-me...
> Vi har ikke en dk.edb.programmering.cpp så jeg bruger denne her
> gruppe.
> Jeg faldt over et mærkeligt problem da jeg sad og programmerede, og nu
> vil jeg gerne vide om det er GNU's compiler der er skør, eller om det
> er C++ standard ( Har desværre ikke fået købt Stroustrup endnu ).
>
> Når man deklarerer en variabel som static i en Classes member
> function, f.eks.:
> class test {
> public:
> host {
> static int i;
> i++;
> }
> }
> Er det så ikke meningen af i er unik for hver instance af class'en.
>
> Håber i fprstår hvad jeg mener, det er mere interesse end et
> egentligt problem.
>
> --
> Best Regards / Venlig Hilsen
> Rasmus Toftdahl Olesen
> halfdan@halfdan.dyndns.org
>
http://halfdan.dyndns.org