2012-03-29 4 views
0

Ich komme in C++ von einem schweren Java-Hintergrund.Wie haben Sie statische Konstanten in einer cpp-Klasse?

Wie haben Sie Konstanten für eine Klasse? Wenn es Java war, würde es so etwas wie

public class Example{ 
    public static final int CONSTANT = 0; 
} 

public static void main (String[] args){ 
    System.out.println(Example.CONSTANT); 
} 

werden, und das Ergebnis wäre nur 0.

in C++ Ich habe bisher dachte:

class Example{ 
    const int LEVEL_INF; 
} 

Ist das richtig?
Auch nach ISO 98?

Antwort

3
class Example{ 
    const int LEVEL_INF; 
}; 

ist nicht pro Klasse, aber pro Instanz. Sie müssen es statisch machen:

class Example{ 
    static const int LEVEL_INF; 
}; 

Der Vorteil von statischen const ganzzahligen Typen ist, dass Sie innerhalb der Klasse initialisieren, nicht unbedingt außerhalb:

class Example{ 
    static const int LEVEL_INF = 1337; 
}; 

Fügen Sie außerdem public, wenn Sie öffentlich wollen Zugang zu ihm.

EDIT: Wie pro @ ildjarn Vorschlag, es außerhalb der Klasse zu initialisieren:

//header.h 
class Example{ 
    static const int LEVEL_INF; 
}; 

//implementation.cpp 

const int Example::LEVEL_INF = 1337; 
+0

Dies wird nur in Ordnung sein, bis er ODR-Level 'LEVEL_INF' verwenden muss, zu welchem ​​Zeitpunkt es eine Definition außerhalb der Klasse benötigt, also denke ich, dass es sich lohnt, hier zu demonstrieren, wie man das macht. – ildjarn

+0

@ildjarn wahr, bearbeitet. –

+0

der ISO 98 Standard hat keine Auswirkungen auf diese? – kotoko

1

Solange es sich um eine integrale Konstante ist, wie int, können Sie es ähnlich wie in Java tun können

class Example { 
public: 
    static const int LEVEL_INF = 0; 
}; 
2

aus Gründen der Vollständigkeit, hier ist eine andere Art und Weise es anders als static const zu tun:

class Example 
{ 
    // Anonymous enum 
    enum { LEVEL_INF = 0; }; 
}; 
Verwandte Themen