En el siguiente fragmento de código, la enumeración Color
se declara dentro de la clase Car
para limitar el alcance de la enumeración e intentar no "contaminar" el espacio de nombres global.Declarar una enumeración dentro de una clase
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) ¿Es esta una buena manera de limitar el alcance de la Color
enumeración? O, ¿debería declararlo fuera de la clase Car
, pero posiblemente dentro de su propio espacio de nombres o estructura? Acabo de encontrar este artículo hoy, que defiende lo último y analiza algunos puntos agradables sobre enums: http://gamesfromwithin.com/stupid-c-tricks-2-better-enums.
(2) En este ejemplo, cuando se trabaja dentro de la clase, es lo mejor para codificar la enumeración como Car::Color
, o acaba de Color
suficiente? (Supongo que el primero es mejor, en caso de que haya otra enumeración Color
declarada en el espacio de nombres global. De esa forma, al menos, somos explícitos sobre la enumeración a la que nos referimos)
2. Sí y no. 'Car :: Color getColor()' pero 'void Car :: setColor (Color c)' porque en 'setColor' ya tenemos el especificador. –