2016-01-06 71 views
0

我一直在努力通過C++。我正在努力讓我的腦袋圍繞成員初始化,特別是一行代碼。考慮下面的程序;努力理解'會員初始化'

#include <iostream> 
#include <cstdint> 

class RGBA 
{ 
private: 
    uint8_t m_red = 0; 
    uint8_t m_green = 0; 
    uint8_t m_blue = 0; 
    uint8_t m_alpha = 255; 



public: 
    ***RGBA(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha = 255): 
     m_red(red), m_green(green), m_blue(blue), m_alpha(alpha)*** 
    { 
    } 

    void print() 
    { 
     std::cout << "r = " << static_cast<int>(m_red) << " g = " << static_cast<int>(m_green) << " b = " << static_cast<int>(m_blue) << " a = " << static_cast<int>(m_alpha) << '\n'; 
    } 
}; 

我已經加粗的我有問題的代碼行(在「公共」我的問題首次聲明,爲什麼我必須聲明阿爾法是255的時候我沒有要申報紅,綠或藍爲0,而我必須聲明它們都在私人部分。

可能有人請解釋這個給我,甚至更好地解釋成員初始化的這個概念。謝謝你,任何的幫助深表感謝。

int main() 
{ 
    RGBA teal(0, 127, 127); 
    teal.print(); 

    return 0; 
} 
+0

'255'是'alpha'的默認參數,所以每次你想要一個完全不透明的顏色時,你不必做'RGBA(R,G,B,255)'。你可以做'RGBA(R,G,B)'。 – LogicStuff

回答

1

RGBA,A組件是用於alpha的,它是透明的ency。如果你將它設爲0,那麼你的圖片或其他內容將完全透明/不可見。將其設置爲255(最大)意味着RGB顏色不會受到影響。

+0

謝謝塔裏克!我明白這一點,但在小程序的背景下,爲什麼我們不必說紅= 0,綠= 0和藍= 0?是因爲默認情況下它們被設置爲零?謝謝,弗蘭克! – FrankWhite

+1

對不起,我誤解了這個問題,你不必將它們設置爲0的原因是因爲用戶決定了它們的價值。你希望alpha值爲255,用戶無法控制它。在你的主體中,你用你自己的RGB值調用函數。 –

+0

好吧,我還在掙扎一點。在類的私有部分中,我們將變量初始化爲0,0,0,255。我理解這一點。然而,現在在公共部分,在成員初始化中,爲什麼我們不說'uint8_t red = 0,uint8_t green = 0 .....',而不是對這些做任何事情,但我們確實說uint8_t alpha = 255。再次感謝塔裏克,我會盡快得到它:) – FrankWhite