У наступному фрагменті коду Color
enum оголошується в межах 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
нас вже є специфікатор.