Avatar billede Lasse Novice
28. oktober 2002 - 02:10 Der er 4 kommentarer og
1 løsning

arvning af static members

Jeg har en klasse som egentlig kun skal bruges til at arve fra. Alle de klasser som skal arve fra den skal have en static integer. Er det muligt, eller skal man oprette den statiske integer i hver klasse som arver?

Dvs. er det muligt at arve, UDEN at det bliver den samme statiske variable i alle de klasser der arver?

tak paa forhaand
Avatar billede lasse_buck Nybegynder
28. oktober 2002 - 03:41 #1
Der findes kun en kopi af en statisk variabel.
Du er nød til at oprette en statisk variabel på hver eneste klasse, som nedarver, præcis fordi det IKKE er den samme variabel.

Selvom du skal til at definere en forskellige variable på hver klasse, så behøver det ikke at gå ud over dit design, hvis du anvender virtuelle funktioner til at skrive og læse fra din(e) static variable.
Avatar billede arne_v Ekspert
28. oktober 2002 - 07:53 #2
Nej.
Avatar billede chries Nybegynder
28. oktober 2002 - 09:07 #3
du kan give den statiske variablet med til contructoeren i base klassen.

#include <string.h>
#include <iostream.h>
#include <stdio.h>

class Base
{
public:
    Base( int *counter )
    {
        m_staticCounter = counter;
    }

    int IncMe()
    {
        (*m_staticCounter)++;
        return *m_staticCounter;
    }

    int DecMe()
    {
        (*m_staticCounter)--;
        return *m_staticCounter;
    }

private:
    int *m_staticCounter;

};

class Chicken : public Base
{
public:
    Chicken() : Base( &m_myCounter )
    {

    }

    static int m_myCounter;
};


int Chicken::m_myCounter = 0;

class Cow : public Base
{
public:
    Cow() : Base( &m_myCounter )
    {

    }

    static int m_myCounter;
};

int Cow::m_myCounter = 0;


int main(int argc, char* argv[])
{
    Chicken chicken;
    Cow cow;

    chicken.IncMe();
    chicken.IncMe();
    int noChickens = chicken.IncMe();

    cow.IncMe();
    cow.IncMe();
    cow.IncMe();
    int noCows = cow.IncMe();

    cout << "Chickens: " << noChickens << endl;
    cout << "Cows: " << noCows << endl;

    return 0;
}
Avatar billede Lasse Novice
05. november 2002 - 22:20 #4
ok... jeg bliver noedt til at oprette en i hvert klasse kan jeg se...
Avatar billede vivian22 Nybegynder
22. juli 2012 - 02:57 #5
SPAM fjernet

Dette indlæg er blevet modereret af en CoAdmin

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester