2013-01-18 59 views
2

我有一個顏色類,它保存着顏色的紅色,綠色,藍色和alpha通道的值。通過爲四個通道指定值,類構造函數允許您創建新的顏色。但是,爲了方便,我還想爲程序員提供一些「預製」顏色。例如,而不必像如何在類中創建不可變的靜態公共對象?

DrawBox(new Color(255, 0, 0));

你就可以說

DrawRectangle(Color::Red);

哪裏Color.Red是Color類裏面生活色彩的一個實例。如何在Color類中聲明Color的這些實例?我確定這個技術有個名字,但是當我在網上尋找幫助時,我不知道要使用哪些搜索條件。

我沒有使用任何內置或公開的類或庫,因爲這是創建基本圖形堆棧的個人練習的一部分。

感謝您的幫助!

+0

你使用C++ 11嗎? –

+2

另外:你的兩個例子並不相同。第一個將一個*指針*傳遞給DrawBox(),而第二個可能傳遞對象。 –

+0

@Benjin你要找的名字是'enum'。 C++本身只支持整數枚舉,但有很多方法可以獲得類似的結果(請參閱答案)。其他語言(例如Java)支持任何類型的枚舉。 – Coincoin

回答

6

首先,避免使用new。您可以使用Color作爲簡單的值類型。

現在作爲一個回答你的問題,是的,你可以做到這一點爲:

//color.h 

typedef unsigned char byte; 

class Color 
{ 
    public: 
     //declaration 
     const static Color Red; 
     const static Color Green; 
     const static Color Blue; 
    public: 

     Color(byte red, byte green, byte blue); 
}; 

//define the static members in color.cpp file 
#include "color.h" 

const Color Color::Red(255,0,0); 
const Color Color::Green(0,255,0); 
const Color Color::Blue(0,0,255); 

然後使用Color::Red如要使用。

+0

是否需要定義'Red'? –

+0

@ K-ballo:目前的編譯器不支持它,它沒有任何意義。我將我的代碼更改爲C++ 03。 – Nawaz

+0

但是在_C++ 11_中這方面有沒有改變?是否已經將_static const integrals的規則推廣? –

相關問題