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