2012-05-01 69 views
0

我總是在Java中創建一個名爲Constants的類來存儲將在應用程序中使用的常量值。C++中的狀態標誌

對於應用

class Constants { 

    public static final int GOOD_RES = 1; 
    public static final int BAD_RES = 0; 
    public static final int FILE_NOT_READ = 10; 
    // To be continued 
} 

或單個類

class SomeClass { 

    private static final int GOOD_RES = 1; 
    private static final int BAD_RES = 0; 
    private static final int FILE_NOT_READ = 10; 
    // To be continued 
} 

如何做到在C++中相同的所有類?我可以在頭文件中創建一個類,並在CPP文件中聲明和放置定義。例如。

頭文件。

class const_values { 
    const static int GOOD_STATE = 1; 
    const static int BAD_STATE = 2; 
    const static string s; 
} 

CPP文件

string const_values::s = "lorem ipsum"; 

,可以嗎?

+1

是的。是的。 – mfontanini

+0

@fontanini,謝謝! –

+0

您可能會錯過您的C++類中的公共關鍵字限定符 – Abhijit

回答

4

對於使用命名空間:

constants.h:

#include <string> 
namespace Constants 
{ 
    const int GOOD_STATE = 1; 
    const int BAD_STATE = 2; 
    const std::string str("test"); 
} 

main.cpp中:

#include <iostream> 
#include "constants.h" 
int main(int argc, char** argv) 
{ 
    std::cout << Constants::GOOD_STATE << " " << Constants::str << std::endl; 
} 

輸出:1個測試

2

使用類只是靜態常量是合法的C++,但我會建議通常有更好的方法來實現你的目標。

首先是使用一個命名空間:

namespace values 
{ 
    const static int GOOD_STATE = 1; 
    const static int BAD_STATE = 2; 
    const static string s; // you can never make this anything but empty, by the way 
}; 

如果由於某種原因,你就必須使用一個類,另一個(也許不是更好)的方式來所以它是通過使用enum S:

class values 
{ 
public: 
    enum {GOOD_STATE = 1, BAD_STATE = 2}; 
}; 

使用namepsace的一個好處是你可以使該命名空間不被命名。這具有使名稱空間中的名稱在全局範圍內可用的效果,但僅限於在其定義的翻譯單元中。因此,不會碰撞其他翻譯單元,並且可能不需要名稱空間的傻名稱。