2009-07-11 10 views

Odpowiedz

18

Możesz - umieszczasz const przed nazwą typu.

class C 
{ 
    const int x; 

public: 
     C() : x (5) { } 
}; 
3

Oczywiście, najprostszym sposobem jest podobny do tego, jeżeli wartość będzie taka sama we wszystkich instancji klasy:

class X 
{ 
public: 
    static const int i = 1; 
}; 

Lub jeśli nie chcesz to statyczna:

class X 
{ 
public: 
    const int i; 
    X(int the_i) : i(the_i) 
    {  
    } 
}; 
+2

To powinno dać ci inny błąd, ponieważ podałeś deklarację i, nie definiując jej. Będziesz potrzebował "int X :: i;" gdzieś. –

+2

@James - nie tak, jeśli kompilator jest wystarczająco aktualny, aby obsługiwać wbudowane statyczne elementy const, które są inicjowane w miejscu, w którym są zadeklarowane. –

+1

@James: Nie wierzę, że to prawda w przypadku statycznej const int - nie potrzebujesz właściwie oddzielnej definicji, ponieważ kompilator traktuje ją jako stałą rzeczywistą. – RichieHindle

8

Deklarujesz tak, jak gdybyś nie był członkiem. Zauważ, że deklarowanie zmiennej jako const będzie miało znaczny wpływ na sposób użycia klasy. Z pewnością będziesz potrzebował konstruktora, aby go zainicjować:

class A { 
    public: 
     A(int x) : cvar(x) {} 
    private: 
     const int cvar; 
}; 
Powiązane problemy