2016-01-06 89 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