Trong đoạn mã sau, Color
enum được khai báo trong Car
lớp để giới hạn phạm vi của enum và cố gắng không "làm ô nhiễm" không gian tên toàn cục.
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) Đây có phải là một cách tốt để giới hạn phạm vi của Color
enum? Hoặc, tôi nên khai báo nó bên ngoài Car
lớp, nhưng có thể trong không gian tên hoặc cấu trúc của chính nó? Tôi vừa xem qua bài viết này hôm nay, trong đó ủng hộ phần sau và thảo luận về một số điểm hay về enums: http://gamesfromwithin.com/stool-c-tricks-2-better-enums .
(2) Trong ví dụ này, khi làm việc trong lớp, tốt nhất là viết mã enum như Car::Color
, hoặc chỉ là Color
đủ? (Tôi cho rằng cái trước là tốt hơn, chỉ trong trường hợp có một Color
enum khác được khai báo trong không gian tên toàn cầu. Bằng cách đó, ít nhất, chúng tôi rõ ràng về enum mà chúng tôi đang đề cập.)
Car::Color getColor()
nhưngvoid Car::setColor(Color c)
bởi vì trongsetColor
chúng tôi đã có specifier.