У наступному фрагменті коду Colorenum оголошується в межах Carкласу, щоб обмежити область перерахування та намагатися не "забруднювати" глобальний простір імен.
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) Це хороший спосіб обмежити сферу Colorперерахування? Або я повинен оголосити його поза Carкласом, але, можливо, у власному просторі імен чи структури? Я щойно натрапив на цю статтю сьогодні, яка виступає за останню і обговорює деякі приємні моменти щодо переліків: http://gamesfromwithin.com/stupid-c-tricks-2-better-enums .
(2) У цьому прикладі, під час роботи в межах класу, найкраще кодувати коду як Car::Color, або це просто Colorвистачить? (Я припускаю, що колишнє краще, на всякий випадок, якщо Colorв глобальному просторі імен буде оголошено ще один перелік. Таким чином, принаймні, ми чітко заявляємо про перерахування, на яке ми посилаємося.)
Car::Color getColor()аvoid Car::setColor(Color c)тому, що уsetColorнас вже є специфікатор.