/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Static variabel i member function
Fra : Rasmus Toftdahl Oles~


Dato : 03-09-01 21:00

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

 
 
Kent Friis (03-09-2001)
Kommentar
Fra : Kent Friis


Dato : 03-09-01 21:33

Den 03 Sep 2001 22:00:27 +0200 skrev Rasmus Toftdahl Olesen:
>Vi har ikke en dk.edb.programmering.cpp så jeg bruger denne her
>gruppe.

Hvis vi skulle have en d.e.p.cpp til C-Pre-Processor spørgsmål, så
skulle vi vel også have en d.e.p.cc1, m.fl...

>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.

Ikke SVJV - en static variabel findes kun en gang i hele programmet.

Hvis du vil have en variabel for hver instans, så skal den placeres
oppe under private:

Mvh
Kent
--
Which one is faster - Lotus Notes or Lotus Esprit?

Rasmus Toftdahl Oles~ (03-09-2001)
Kommentar
Fra : Rasmus Toftdahl Oles~


Dato : 03-09-01 21:47

kfr@fleggaard.dk (Kent Friis) writes:
> Den 03 Sep 2001 22:00:27 +0200 skrev Rasmus Toftdahl Olesen:
> >Vi har ikke en dk.edb.programmering.cpp så jeg bruger denne her
> >gruppe.
>
> Hvis vi skulle have en d.e.p.cpp til C-Pre-Processor spørgsmål, så
> skulle vi vel også have en d.e.p.cc1, m.fl...
Jeg mente faktisk cpp = C++ . Hvad står cc1 for ?

> >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 ).
>
> Ikke SVJV - en static variabel findes kun en gang i hele programmet.
Ok, stadig en mangel synes jeg.

Jeg tror lige jeg retter mit eget test program:
class test {
public:
void host(void) {
static int i;
i++;
}
}

host er en funktion.

--
Best Regards / Venlig Hilsen
   Rasmus Toftdahl Olesen
    halfdan@halfdan.dyndns.org
    http://halfdan.dyndns.org

Mogens Hansen (04-09-2001)
Kommentar
Fra : Mogens Hansen


Dato : 04-09-01 05:42


"Rasmus Toftdahl Olesen" <halfdan@halfdan.dyndns.org> wrote in message
news:87ae0chuik.fsf@halfdan.i-did-not-set--mail-host-address--so-shoot-me...
> kfr@fleggaard.dk (Kent Friis) writes:
> > Ikke SVJV - en static variabel findes kun en gang i hele programmet.
> Ok, stadig en mangel synes jeg.

Hvorfor syntes du at det er en mangel ?
Hvad er det du vil, og syntes du har svært ved ?

Venlig hilsen

Mogens Hansen

PS. Bjarne Stroustrups bog "The C++ Programming Language, Special Edition"
ISBN 0-201-70073-5, eller "The C++ Programming Language, Third Edition" kan
anbefales (du sagde i dit oprindelige indlæg, at du ikke havde købt den
endnu).
Indholdet af de to bøger er identisk (hvis de er trykt samtidigt).
Papirkvaliteten og indbindingen er blot bedre i Special Edition.



Kent Friis (04-09-2001)
Kommentar
Fra : Kent Friis


Dato : 04-09-01 18:17

Den 03 Sep 2001 22:46:59 +0200 skrev Rasmus Toftdahl Olesen:
>kfr@fleggaard.dk (Kent Friis) writes:
>> Den 03 Sep 2001 22:00:27 +0200 skrev Rasmus Toftdahl Olesen:
>> >Vi har ikke en dk.edb.programmering.cpp så jeg bruger denne her
>> >gruppe.
>>
>> Hvis vi skulle have en d.e.p.cpp til C-Pre-Processor spørgsmål, så
>> skulle vi vel også have en d.e.p.cc1, m.fl...
>Jeg mente faktisk cpp = C++ .

En irriterende forkortelse skabt pga. CP/M's 8.3 filnavns-format.

>Hvad står cc1 for ?

cc1 er SVJV den del af en C-compiler der står for selve compileringen.
cc kalder først cpp, derefter cc1 og til sidst as (assembleren).

Mvh
Kent
--
.~. .~.
/V\ From Palm Pilot to S/390 /V\
// \\ Truly scalable operating system // \\
/( )\ Linux /( )\
^^-^^ ^^-^^

Jesper Gødvad (03-09-2001)
Kommentar
Fra : Jesper Gødvad


Dato : 03-09-01 21:53


> 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.

Jeg er ikke helt klar over din konstruktion, men både static variabler og
funktioner er fælles for alle objekterne.

Andet giver så vidt jeg kan se heller ikke mening. Du har jo mulighed for at
gøre 'i' private og initiere den i constructoren - er det ikke dét du
ønsker?

Hvis 'i' er static kan du i stedet bruge den til at tælle hvor mange
test-objekter du har konstrueret a lá:

class test {
static int i; // initieres til default værdi = 0;
public:
test() { i++; }
~test() { i--; }
int antalTestObjekter() { return i; }
}

mvh. jesper



Rasmus Toftdahl Oles~ (03-09-2001)
Kommentar
Fra : Rasmus Toftdahl Oles~


Dato : 03-09-01 21:52

"Jesper Gødvad" <Xesper@goedvad.dk> writes:
--snip--
> Jeg er ikke helt klar over din konstruktion, men både static variabler og
> funktioner er fælles for alle objekterne.
>
> Andet giver så vidt jeg kan se heller ikke mening. Du har jo mulighed for at
> gøre 'i' private og initiere den i constructoren - er det ikke dét du
> ønsker?
>
> Hvis 'i' er static kan du i stedet bruge den til at tælle hvor mange
> test-objekter du har konstrueret a lá:
>
> class test {
> static int i; // initieres til default værdi = 0;
> public:
> test() { i++; }
> ~test() { i--; }
> int antalTestObjekter() { return i; }
> }
Ja, jeg kan godt se det efter at have tænkt lidt over det, så har man
stadig begge muligheder, så man stadig slipper for en global variabel.

Tak for indlæg, også til Claus.

--
Best Regards / Venlig Hilsen
   Rasmus Toftdahl Olesen
    halfdan@halfdan.dyndns.org
    http://halfdan.dyndns.org

Igor V. Rafienko (03-09-2001)
Kommentar
Fra : Igor V. Rafienko


Dato : 03-09-01 22:12

[ Rasmus Toftdahl Olesen ]

[ snip ]

> 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.


Nei. Samtlige objekter (== instanser av klassen) deler på denne
variabelen, på samme måte som de ville ha gjort, hadde (den statiske)
variabelen vært deklarert som medlemsvariabel, heller enn lokal
medlemsvariabel (det kan også nevnes at dersom en klasse har indre
klasser, så får ikke de indre klassene lov til å ha statiske
variable).

struct test
{
int foo() { static int bar = 0; ++bar; return bar; }
};


int
main()
{
test a1, a2;

std::cout << a1.foo() << "\n"; // test::foo::bar == 1
std::cout << a2.foo() << "\n"; // test::foo::bar == 2
std::cout << a1.foo() << "\n"; // test::foo::bar == 3
}

produserer:

$ ./a.out
1
2
3
$





ivr-jeg-vil-ikke-gå-over-til-emacs-20.7, M-x customize-face RET.
--
"Ma belle demoiselle, repondit Candide, quand on est amoureux, jaloux
et fouette par l'Inquisition, on ne se connait plus"
            Voltaire, "Candide"
foo

Fabio Fernandes (18-10-2001)
Kommentar
Fra : Fabio Fernandes


Dato : 18-10-01 12:34


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



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste