Avatar billede susrn Nybegynder
03. april 2003 - 20:42 Der er 7 kommentarer og
1 løsning

golbalt object

jeg har en klasse med en metode som skal bruges af flere andre klasser i et projekt.

Hvordan gør jeg bedst ét objekt af min klasse tilgængelig for de andre klasser?

Min klasser er implementeret som en singleton, men hvis jeg nu erklærer den som her
class Bruger1{
...
private
  MySingleton mySingle;
...
}
class Bruger2{
...
private
  MySingleton mySingle;
...
}
ja, hvad så egentlig?

Eller var det bedre at bruge extern til at erklære objektet globalt(og hvordan er syntaksen præcis for det), men hvad er fidusen så ved at have en singleton?
Avatar billede arne_v Ekspert
03. april 2003 - 20:49 #1
Det er ikke sådan du laver en singleton.

En singleton er:

class MySingleton {
    private:
        static MySingleton instance = NULL;
        MySingleton() {
        }
    public:
        static MySingleton getInstance() {
            if(instance==NULL) instance = new MySingleton();
            return instance;
        }
        void foobar() {
        }
}

og bruges som:

MySingleton mys = MySingleton.getInstance();
mys.foobar();
Avatar billede arne_v Ekspert
03. april 2003 - 20:50 #2
NB: tilgiv mig hvis der er smuttet en javacisme ind i koden, jeg laver
    mest simgletons i Java.
Avatar billede arne_v Ekspert
03. april 2003 - 20:53 #3
Den var javaficeret.

I C++ må det være:

class MySingleton {
    private:
        static MySingleton* instance = NULL;
        MySingleton() {
        }
    public:
        static MySingleton* getInstance() {
            if(instance==NULL) instance = new MySingleton();
            return instance;
        }
        void foobar() {
        }
}

MySingleton* mys = MySingleton.getInstance();
mys->foobar();
Avatar billede susrn Nybegynder
03. april 2003 - 21:13 #4
ja, min formulering var upræcis, min singleton er som du beskriver,
problemet kommer når jeg skal bruge den i andre klasser (.cpp filer)
skal den så #include's i alle .cpp eller hvad?
Avatar billede arne_v Ekspert
03. april 2003 - 21:28 #5
Du skal have en erklæring af den i en .H fil og en implementering i
en .CPP fil.

Du skal inkludere .H filen i alle de .CPP filer hvor du skal kalde
MySingleton.getInstance().
Avatar billede arne_v Ekspert
07. april 2003 - 22:08 #6
Er du kommet videre ?
Avatar billede susrn Nybegynder
08. april 2003 - 09:09 #7
ja, jeg er langt forbi. Du kan jo poste et svar, så skal du få points.
Avatar billede arne_v Ekspert
08. april 2003 - 09:15 #8
ok
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