7.2.10 Sử dụng kiểu enum như thế nào ? (6)

Sử dụng các kiểu enum có thể bảo vệ chúng ta khỏi nhiều mối đe doạ, nhưng một cũng có một số vấn đề với kiểu enum. Hãy xem →

Toán tử ‘+’ không không biết gì về các ngày trong tuần và nó không quan tâm đến từ “SATURDAY”. Điều đó có thể dẫn đến việc giá trị của biến d có thể nằm ngoài khoảng cho phép của nó.

Chính vì vậy chúng ta không thể code như này:

mà phải code như này:


Chúng ta có thể tránh vấn đề này bằng cách nạp chồng toán tử ‘+’ của enum weekday.

Làm như sau →

Bây giờ, việc cộng một giá trị int vào một biến kiểu weekday sẽ tính đến tính chất chu kỳ của ngày trong tuần, ví dụ: SUNDAY + 15 sẽ là MONDAY.

Chú ý dòng sau: 

return weekday((int(day) + days) % 7);

Chúng ta có thể viết nó dưới một hình thức đơn giản hơn, như thế này không ?

return weekday((day + days) % 7);

No, chúng ta không thể. Biểu thức ‘day + days’ sẽ gọi đệ quy đến toán tử nạp chồng của chúng ta và chương trình sẽ sụp đổ.