W poniższym fragmencie kodu wyliczenie Color
jest zadeklarowane w klasie Car
w celu ograniczenia zakresu wyliczenia i próby "zanieczyszczenia" globalnej przestrzeni nazw.Zgłaszanie wyliczenia w klasie
class Car
{
public:
enum Color
{
RED,
BLUE,
WHITE
};
void SetColor(Car::Color color)
{
_color = color;
}
Car::Color GetColor() const
{
return _color;
}
private:
Car::Color _color;
};
(1) Czy to dobry sposób, aby ograniczyć zakres Color
wyliczenia? Czy powinienem zadeklarować go poza klasą Car
, ale być może w obrębie własnej przestrzeni nazw lub struktury? Właśnie natknąłem się na ten artykuł dzisiaj, który opowiada się za tym ostatnim i omawia kilka fajnych punktów dotyczących wyliczeń: http://gamesfromwithin.com/stupid-c-tricks-2-better-enums.
(2) W tym przykładzie, gdy pracuje ciągu klasę, jest to najlepiej kodować enum jako Car::Color
, lub po prostu Color
wystarczyć? (Zakładam, że ta pierwsza jest lepsza, na wypadek gdyby w globalnej przestrzeni nazw zostało zadeklarowane inne wyliczenie Color
. W ten sposób, jednoznacznie mówimy o wyliczeniu, do którego się odnosimy.)
2. Tak i nie. 'Car :: Color getColor()' ale 'void Car :: setColor (Color c)' ponieważ w 'setColor' mamy już specyfikator. –