Enumeration là gì

Chào chúng ta đang quan sát và theo dõi khóa huấn luyện xây dựng trực tuyến ngôn ngữ C++.

Bạn đang xem: Enumeration là gì

Trong bài học kinh nghiệm ngày hôm nay, chúng ta vẫn thuộc khám phá về tự khóa enum, giải pháp thực hiện, và quan trọng đặc biệt duy nhất là vì sao họ áp dụng enum trong ngôn ngữ C++.

Enumarated types

Kiểu liệt kê là một trong những trong những các mẫu mã dữ liệu vị bạn lập trình trường đoản cú quan niệm. Tại sao bọn họ yêu cầu quan niệm kiểu dáng tài liệu mới? Trong quy trình lập trình sẵn, phần đa hình trạng dữ liệu được tư tưởng sẵn trong ngữ điệu thiết kế rất có thể ko đưa về chân thành và ý nghĩa cân xứng. ví dụ như mình thích sử dụng các cực hiếm từ 1 mang lại 7 nhằm thay mặt đại diện mang lại 7 ngày vào tuần (1 thay mặt đại diện cho ngày công ty nhật, 7 thay mặt đến sản phẩm công nghệ 7), những điều đó mình phải tối thiểu là 7 trở nên nhằm tàng trữ các cực hiếm này:

const int SUNDAY = 1;const int MONDAY = 2;const int TUESDAY = 3;const int WEDNESDAY = 4;const int THURSDAY = 5;const int FRIDAY = 6;const int SATURDAY = 7;Mình không sử dụng mảng một chiều vào trường vừa lòng này vì:

int DAYS_OF_WEEK<7> = 1, 2, 3, 4, 5, 6, 7 ;Những con số cụ thể ko đem đến ý nghĩa sâu sắc cho những người hiểu mã mối cung cấp chương trình. Việc sử dụng tên của các đổi mới hằng số sẽ giúp đỡ lịch trình chúng ta rõ ràng hơn.

Nhưng bài toán khai báo những hằng số như trên vẫn đang còn một vài nhược điểm:

cũng có thể knhị báo thiếu thốn sót một vài cực hiếm lúc danh sách những hằng số là quá nhiều.

cũng có thể knhì báo không theo một quy qui định (tốt máy tự) nhất thiết khiến chúng ta cạnh tranh search vào công tác. Ví dụ:

const int WEDNESDAY = 4;const int SUNDAY = 1;const int TUESDAY = 3;const int FRIDAY = 6;const int MONDAY = 2;const int SATURDAY = 7;const int THURSDAY = 5;Có một số trong những hằng số không liên quan đến nhau mà lại được knhị báo gần nhau khiến cho họ dễ dàng rối. Ví dụ:

const float PI = 3.14;const float ACCELERATION_OF_GRAVITY = 9.8;const int MAX_SIZE_OF_ARRAY = 255;//..............Bởi vậy, hy vọng khắc phục và hạn chế một số trong những nhược điểm trên, bọn họ phải search phương pháp để tập thích hợp các hằng số tất cả ý nghĩa sâu sắc tương đương nhau thành phần nhiều team hằng số riêng biệt. Kiểu liệt kê sẽ giúp chúng ta tiến hành điều đó.

Công dụng của hình dạng liệt kê

Như mình đã trình diễn sống trên, hình dáng liệt kê tất cả công dụng giúp sửa chữa những số lượng (cực hiếm nuốm thể) bởi các chiếc tên tất cả ý nghĩa, cùng nó còn khiến cho chúng ta tập đúng theo những quý hiếm bao gồm ý nghĩa sâu sắc liên quan cùng nhau thành từng team. Mỗi team hằng số này khi chuyển vào kiểu liệt kê vẫn trở nên một hình dạng dữ liệu (người ta hay hotline enumeration là một hình dạng dữ liệu vào C++ vì nó tất cả biện pháp knhị báo tương tự như nhỏng knhì báo biến chuyển, chứ mình thấy nó tương tự một group của những cực hiếm hơn).

Cú pháp khai báo dạng hình liệt kê

Để khái niệm một kiểu liệt kê mới, chúng ta sử dụng từ bỏ khóa enum theo kết cấu sau:

enum //danh mục all of values inside this block//each enumerator is separated by a comma, not a semicolon;Việc khai báo kiểu dữ liệu bắt đầu (nhỏng đẳng cấp enum) không kinh nghiệm công tác cấp phép bộ nhớ lưu trữ, thời điểm làm sao chúng ta sử dụng hình trạng enum vừa đã có được định nghĩa để tạo nên biến mẫu mã enum thì chương trình new cấp phép bộ nhớ.

Mỗi quý hiếm trong bloông chồng của kiểu enum phương pháp nhau do một dấu phẩy (so với cực hiếm ở đầu cuối thì không cần áp dụng vết phẩy).

Khai báo dạng hình liệt kê

Mình đã nói về lý thuyết của hình dạng enum (kiểu liệt kê) chấm dứt, chắc chắn hiện thời các bạn cũng đang tò mò muốn biết sau cuối thì khai báo cùng áp dụng nó ra sao. Dưới đấy là một ví dụ:

enum DaysOfWeekSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;Nhỏng chúng ta thấy, sau thời điểm khái niệm một kiểu enum ngừng thì chấm dứt nó là 1 trong những lốt chnóng phẩy, do đó cũng là một trong những câu lệnh. Về khía cạnh cơ phiên bản, họ phải đặt toàn thể câu lệnh trên cùng một dòng:

enum DaysOfWeek SUNDAY,MONDAY,TUESDAY, WEDNESDAY,THURSDAY, FRIDAY, SATURDAY ;Nhưng compiler vẫn phát âm được một câu lệnh vị trí những loại đề nghị bản thân chọn cách viết ngơi nghỉ trên (tách bóc thành nhiều dòng) nhằm phần tư tưởng của chính bản thân mình rõ ràng rộng.

vì thế là họ sẽ gồm một kiểu dáng dữ liệu bắt đầu mang đến chương trình. Các chúng ta cũng có thể Gọi DaysOfWeek là 1 trong những thứ hạng tài liệu (hình dáng enum giỏi vẻ bên ngoài liệt kê) hoặc hoàn toàn có thể Điện thoại tư vấn là tên gọi của một nhóm các quý hiếm tương tự như bọn họ giỏi đi dạo với bằng hữu theo team bé dại rồi đánh tên mang lại đội vậy.

Trong một lịch trình, chúng ta có thể có khá nhiều khai báo giao diện enum không giống nhau. ví dụ như mình khai báo thêm vài ba hình dáng enum khác:

enum DaysOfWeekSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;enum ColorRED,GREEN,BLUE,WHITE;enum AnimalCAT,DOG,HORSE,MONKEY,CHICKEN;do đó là lịch trình của chúng ta có 3 vẻ bên ngoài tài liệu bắt đầu (3 team quý hiếm mới), mỗi mẫu mã enum này hoàn toàn ko tương quan gì cho nhau, chỉ bao gồm những giá trị phía bên trong từng dạng hình enum new gồm liên quan mang lại nhau về phương diện ý nghĩa.

Xem thêm: Phân Biệt Giấy Ủy Quyền Và Hợp Đồng Ủy Quyền Là Gì ? Theo Quy Định Của Bộ Luật Dân Sự

Nhưng bao gồm thấy cực hiếm nào đâu?

Lúc nhìn vào bên trong kân hận lệnh định nghĩa của kiểu enum mang tên Color, chúng ta chỉ thấy hồ hết những danh trường đoản cú như RED, GREEN, BLUE... cơ mà không thấy mọi số lượng. Thực hóa học, phần nhiều danh trường đoản cú này đã làm được đính thêm cho 1 giá trị rõ ràng, cùng những cái danh từ mà lại bọn họ bắt gặp vẫn đại diện đến đầy đủ quý giá kia. Sử dụng đầy đủ danh trường đoản cú để thay thế sửa chữa cho phần nhiều số lượng để giúp đỡ người gọi công tác dễ nắm bắt rộng (chứ không giúp chương trình chạy nhanh khô hơn).

Enumerator values

Bây tiếng bản thân đang làm một công tác mẫu mã để show mang đến chúng ta xem hầu hết giá trị được đặt trong blochồng của một hình dáng enum mình trường đoản cú định nghĩa:

int main()enum AlphabetLETTER_A,LETTER_B,LETTER_C,LETTER_D,LETTER_E;cout << LETTER_A << endl;cout << LETTER_B << endl;cout << LETTER_C << endl;cout << LETTER_D << endl;cout << LETTER_E << endl;return 0;khi mình chạy chương trình, kết quả lộ diện trên console là:

*

do vậy, ko bắt buộc bọn họ trực tiếp gán giá trị cho các thương hiệu hằng số, compiler đang auto khởi sản xuất giá trị cho chúng, bắt đầu với giá trị 0 với tăng đột biến. Các bạn cũng đã thấy rằng, sau khoản thời gian định nghĩa chấm dứt 1 giao diện enum thì bạn cũng có thể áp dụng các tên gọi bên trong enum tựa như những hằng số. Vì gần như giá trị hằng số này là quý hiếm kiểu integer (int), buộc phải họ cũng rất có thể gán bọn chúng mang đến gần như đổi thay hình trạng int không giống. Ví dụ:

enum AlphabetLETTER_A,LETTER_B,LETTER_C,LETTER_D,LETTER_E;int iValue = LETTER_A;Bên cạnh Việc tự động hóa gán giá trị mang đến từng thành phần được liệt kê, họ cũng hoàn toàn có thể dữ thế chủ động thay đổi quý hiếm cho cái đó (nhưng lại chỉ có thể biến đổi cực hiếm vào phần khai báo), một enum sau khi sẽ có mang chấm dứt thì cần yếu đổi khác phần đông giá trị của danh sách những phần tử nữa.

enum DirectionUPhường. = 1, //assigned 1 by programmerDOWN = 3, //assigned 3 by programmerLEFT, //assigned 4 by compilerRIGHT //assigned 5 by compiler;cout << UP.. << " " << DOWN << " " << LEFT << " " << RIGHT << endl;Đoạn chương trình này sẽ in ra:

1 3 4 5bởi thế, compiler đã tự động hóa gán quý hiếm cho những phần tử ko được khởi chế tạo ra cực hiếm. Ngoại trừ phần tử thứ nhất trong enum, hầu như hằng số không giống sẽ tiến hành gán giá trị bằng phần tử trước nó cộng thêm một.

Lưu ý: những hằng số vào cùng một enum có thể gồm cùng cực hiếm với nhau.

Best practice: Don’t assign specific values lớn your enumerators.

Rule: Don’t assign the same value lớn two enumerators in the same enumeration unless there’s a very good reason.

Sử dụng kiểu dáng enum đang quan niệm nhỏng một thứ hạng tài liệu thông thường

Nlỗi mình trình bày nghỉ ngơi bên trên, trường đoản cú khóa enum trong C++ góp họ tư tưởng một vẻ bên ngoài dữ liệu new mang đến công tác. Tuy nó chỉ nên tập thích hợp list những hằng số tất cả ý nghĩa đối sánh cùng nhau, mà lại bản chất nó vẫn là một trong những loại dữ liệu (hình dạng liệt kê) buộc phải bạn có thể thực hiện chúng để tạo ra các trở thành. Ví dụ:

enum Color COLOR_BLACK, COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_WHITE, COLOR_CYAN, COLOR_YELLOW;Color backgroundColor;Bây tiếng, họ sẽ bao gồm một biến hóa kiểu Color. Biến backgroundColor chỉ gồm tác dụng tàng trữ cực hiếm của một trong những tất cả các hằng số đã có được liệt kê bên trong phong cách Color. Việc tiến hành gán những cực hiếm không giống hình trạng Color đã tạo ra lỗi về khía cạnh cú pháp.

màu sắc backgroundMàu sắc = 5; //errorBây giờ bản thân đã lựa chọn ra bất kỳ một hằng số ở trong kiểu dáng màu sắc nhằm gán đến biến backgroundMàu sắc.

Màu sắc backgroundColor = COLOR_GREEN;Các bạn phải chú ý rằng, thay đổi thứ hạng enum chỉ hoàn toàn có thể được gán cực hiếm là một trong các các hằng đang khai báo phía bên trong kiểu dáng tài liệu của chính nó, thiết yếu áp dụng hằng của hình dạng enum khác. Ví dụ:

enum TestTEST1,TEST2,TEST3;enum Color COLOR_BLACK, COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_WHITE, COLOR_CYAN, COLOR_YELLOW;Color backgroundMàu sắc = TEST1; //this line makes an errorCompiler sẽ thông tin lỗi: "a value of type Test cannot be used to lớn initialize an entity of type Color".

Những ví dụ về Việc thực hiện enum

Sau Khi đã gán quý giá cho vươn lên là hình dáng enum, biến này đã với cực hiếm là một trong những ngulặng, cùng chúng ta cũng có thể thực hiện biến này để in ấn ra, tính toán thù, đối chiếu, truyền vào hàm theo phong cách quý giá, ... với còn các mục đích khác.

Xem thêm: Vì Sao Dàn Nóng Máy Lạnh Inverter Bị Rò Điện Ra Vỏ Là Lỗi Gì ? Có Sợ Không ?

Trên thực tế, họ thường sử dụng vẻ bên ngoài enum để lấy ra gạn lọc hàm hoặc cách làm nhằm thực thi. Ví dụ:

thường thì, sau mỗi nhãn case chúng ta vẫn đặt một giá trị số ngulặng ứng cùng với từng ngôi trường đúng theo, nhưng hiện thời chúng ta cũng có thể thay thế sửa chữa hồ hết con số bằng các định danh của enum. Trước đây khi thao tác làm việc cùng với câu lệnh switch-case, chúng ta có thể vứt bỏ một số trong những ngôi trường phù hợp nên xem xét nếu như con số những ngôi trường vừa lòng là vô số. Nhưng lúc thực hiện Visual studio 2015 và kiểu dáng enum, họ đã tránh được sự thiếu hụt sót này. Dưới đó là bí quyết nhưng mà Visual studio năm ngoái hổ trợ mang lại thứ hạng enum:

Trong hàm showProducts, mình gõ câu lệnh switch tuy nhiên sử dụng gợi ý của Visual studio.


Chuyên mục: Hỏi Đáp