Avatar billede martinfrost Nybegynder
16. marts 2004 - 18:23 Der er 4 kommentarer

Konstant medlemsdata

Jeg har en klasse med bl.a. en const int SIZE som medlemsdata. Under kald af constructoren ønsker jeg at sætte denne værdi, men får naturligvis ikke umiddelbart lov, da denne variable jo netop er erklæret const.


class1{
public:
  class1(int size=10);
private:
  const int SIZE;
};

Jeg bruger derfor notationen for "pre-assignment":

class1::class1(int size)
:SIZE(size);  //Like an int copy-constructor
{
//Body of constructor

  // Validation could be:
  // non-const-SIZE = ( size >= 20 && size <= 100 ? size : 25 )
}


Men hvad nu, hvis jeg ønsker at validere parameteret size?
Hvordan vil syntaksen for dette være?
Og kan det overhovedet ske INDEN assignment?
Avatar billede bertelbrander Praktikant
16. marts 2004 - 20:30 #1
Følgende ser ud til at virke:

class1::class1(int size) : SIZE(size >= 20 && size <= 100 ? size : 25)
{
}
Avatar billede rrn Nybegynder
18. marts 2004 - 18:13 #2
Det er ikke pænt, men hvis du virkelig har brug for at gøre en const-variabel til ikke-const, så er der følgende mulighed:

  int &non_const_SIZE = *const_cast<int *>(&SIZE);

Herefter kan du f.eks. gøre som du skriver:

  non_const_SIZE = ( size <= 20 && size <= 100 ? size : 25);
Avatar billede martinfrost Nybegynder
19. marts 2004 - 12:27 #3
Jeg takker for begge svar - og til bertelbrander: Du kan bare smide et svar til spørgsmålet, så ska du få pointene :)
Avatar billede bertelbrander Praktikant
19. marts 2004 - 21:06 #4
Jeg forsøger at undgå point.
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