Enum Trong C

     
Chào chúng ta đang theo dõi khóa học lập trình trực tuyến ngữ điệu C++.

Bạn đang xem: Enum trong c

Trong bài học kinh nghiệm ngày hôm nay, bọn họ sẽ cùng khám phá về tự khóa enum, phương pháp sử dụng, và đặc biệt nhất là tại sao họ sử dụng enum trong ngữ điệu C++.

Enumarated types

Kiểu liệt kê là 1 trong số các kiểu tài liệu do fan lập trình từ định nghĩa. Tại sao chúng ta cần tư tưởng kiểu dữ liệu mới? Trong quá trình lập trình, phần đa kiểu tài liệu được quan niệm sẵn trong ngôn ngữ lập trình rất có thể không mang lại chân thành và ý nghĩa phù hợp. Ví dụ mình thích sử dụng các giá trị từ là một đến 7 để đại diện thay mặt cho 7 ngày vào tuần (1 đại diện thay mặt cho ngày công ty nhật, 7 đại diện cho lắp thêm 7), vì vậy mình cần tối thiểu là 7 trở nên để lưu giữ trữ các giá trị 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 thực hiện mảng một chiều vào trường đúng theo này vì:

int DAYS_OF_WEEK<7> = 1, 2, 3, 4, 5, 6, 7 ;Những bé số ví dụ không với lại chân thành và ý nghĩa cho bạn đọc mã mối cung cấp chương trình. Việc áp dụng tên của các biến hằng số sẽ giúp đỡ chương trình chúng ta rõ ràng hơn.

Nhưng việc khai báo những hằng số như trên vẫn có một số trong những nhược điểm:

Có thể khai báo thiếu thốn sót một vài quý giá khi danh sách các hằng số là vượt nhiều.

Có thể khai báo không theo một quy hiện tượng (hay thứ tự) nhất quyết khiến bọn họ khó tìm trong chương trình. 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 khai báo ngay gần nhau khiến bọn họ dễ rối. Ví dụ:

const float PI = 3.14;const float ACCELERATION_OF_GRAVITY = 9.8;const int MAX_SIZE_OF_ARRAY = 255;//..............Như vậy, mong mỏi khắc phục một trong những nhược điểm trên, bọn họ cần tìm phương pháp để tập hợp các hằng số có chân thành và ý nghĩa tương đương nhau thành các nhóm hằng số riêng rẽ biệt. Kiểu liệt kê vẫn giúp họ thực hiện nay điều này.

Công dụng của kiểu liệt kê

Như bản thân đã trình bày ở trên, dạng hình liệt kê có công dụng giúp sửa chữa thay thế các con số (giá trị núm thể) bằng những chiếc tên tất cả ý nghĩa, và nó còn giúp họ tập hợp các giá trị có chân thành và ý nghĩa liên quan với nhau thành từng nhóm. Mỗi team hằng số này khi gửi vào hình dáng liệt kê sẽ vươn lên là một kiểu tài liệu (người ta thường điện thoại tư vấn enumeration là một trong những kiểu dữ liệu trong C++ bởi nó bao gồm cách khai báo giống như như khai báo biến, chứ bản thân thấy nó như thể một group của các giá trị hơn).

Cú pháp khai báo phong cách liệt kê

Để có mang một phong cách liệt kê mới, bọn họ sử dụng từ khóa enum theo kết cấu sau:

enum //list 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 mới (như hình dáng enum) ko yêu cầu chương trình cấp phát bộ nhớ, thời gian nào chúng ta sử dụng đẳng cấp enum vừa vẫn được khái niệm để tạo ra biến phong cách enum thì chương trình mới cấp phát bộ nhớ.

Mỗi cực hiếm trong block của dạng hình enum biện pháp nhau bởi một dấu phẩy (đối với cái giá trị cuối cùng thì không cần áp dụng dấu phẩy).

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

Mình đang nói về kim chỉ nan của phong cách enum (kiểu liệt kê) xong, chắc bây chừ các các bạn cũng đang hiếu kỳ muốn biết cuối cùng thì khai báo và áp dụng nó như thế nào. Dưới đấy là một ví dụ:

enum DaysOfWeekSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;Như các bạn thấy, sau thời điểm định nghĩa một dạng hình enum xong thì chấm dứt nó là 1 trong dấu chấm phẩy, vì đây cũng là một trong câu lệnh. Về phương diện cơ bả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 nằm trên các dòng cần mình chọn lựa cách viết nghỉ ngơi trên (tách thành các dòng) để phần có mang của mình cụ thể hơn.

Như vậy là chúng ta đã tất cả một kiểu dữ liệu mới mang lại chương trình. Các chúng ta cũng có thể gọi DaysOfWeek là một trong kiểu dữ liệu (kiểu enum hay vẻ bên ngoài liệt kê) hoặc hoàn toàn có thể gọi là tên của một tổ các quý hiếm cũng như bọn họ hay đi chơi với anh em theo nhóm nhỏ dại rồi để tên mang đến nhóm vậy.

Trong một chương trình, chúng ta cũng có thể có nhiều khai báo phong cách enum không giống nhau. Ví dụ mình khai báo thêm vài mẫu mã enum khác:

enum DaysOfWeekSUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY;enum ColorRED,GREEN,BLUE,WHITE;enum AnimalCAT,DOG,HORSE,MONKEY,CHICKEN;Như vậy là lịch trình của bọn họ có 3 kiểu tài liệu mới (3 nhóm giá trị mới), mỗi thứ hạng enum này hoàn toàn không tương quan gì mang đến nhau, chỉ có những giá trị phía bên trong mỗi phong cách enum bắt đầu có tương quan đến nhau về phương diện ý nghĩa.

Xem thêm: Cài Đặt Người Theo Dõi Trên Fb, Cách Bật Chế Độ Theo Dõi Trên Facebook

Nhưng bao gồm thấy giá trị nào đâu?

Khi nhìn vào phía bên trong khối lệnh tư tưởng của hình dáng enum có tên Color, chúng ta chỉ thấy đa số những danh từ bỏ như RED, GREEN, BLUE... Mà không thấy những con số. Thực chất, đa số danh từ bỏ này đã có được gắn cho 1 giá trị cố gắng thể, và các chiếc danh trường đoản cú mà chúng ta nhìn thấy sẽ đại diện cho gần như giá trị đó. Thực hiện những danh trường đoản cú để sửa chữa cho những bé số sẽ giúp đỡ người gọi chương trình dễ hiểu hơn (chứ không giúp chương trình chạy nhanh hơn).

Enumerator values

Bây giờ mình sẽ làm cho một chương trình mẫu mã để show cho chúng ta xem đầy đủ giá trị được để trong block của một loại enum mình tự đị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, tác dụng xuất hiện trên console là:

*

Như vậy, không cần chúng ta trực tiếp gán giá chỉ trị cho các tên hằng số, compiler đã tự động khởi chế tác giá trị mang đến chúng, bước đầu với quý giá 0 cùng tăng dần. Chúng ta cũng sẽ thấy rằng, sau khi định nghĩa ngừng 1 kiểu enum thì chúng ta có thể sử dụng những tên gọi phía bên trong enum tựa như các hằng số. Do những quý giá hằng số này là giá trị kiểu integer (int), nên bọn họ cũng có thể gán chúng đến những đổi thay kiểu int khác. 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á bán trị mang lại từng thành phần được liệt kê, họ cũng rất có thể chủ động thay đổi giá trị cho việc đó (nhưng chỉ tất cả thể chuyển đổi giá trị vào phần khai báo), một enum sau thời điểm đã định nghĩa dứt thì không thể chuyển đổi những cực hiếm của list các phần tử nữa.

enum DirectionUP = 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 lịch trình này sẽ in ra:

1 3 4 5Như vậy, compiler sẽ tự động gán giá chỉ trị đến các thành phần không được khởi sinh sản giá trị. Ngoại trừ thành phần đầu tiên trong enum, số đông hằng số khác sẽ tiến hành gán quý giá bằng thành phần trước nó cộng thêm 1.

Lưu ý: hồ hết hằng số trong và một enum rất có thể có cùng quý giá với nhau.

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

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

Sử dụng hình trạng enum đã tư tưởng như một kiểu tài liệu thông thường

Như mình trình diễn ở trên, trường đoản cú khóa enum vào C++ giúp bọn họ định nghĩa một kiểu tài liệu mới mang lại chương trình. Mặc dù nó chỉ nên tập hòa hợp danh sách những hằng số có ý nghĩa tương quan liêu với nhau, nhưng bản chất nó vẫn là một kiểu dữ liệu (kiểu liệt kê) nên bạn có thể sử dụng bọn chúng để tạo thành các biến. Ví dụ:

enum Color COLOR_BLACK, COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_WHITE, COLOR_CYAN, COLOR_YELLOW;Color backgroundColor;Bây giờ, họ đã có một biến đổi kiểu Color. Trở thành backgroundColor chỉ có chức năng lưu trữ quý giá của một trong các số tất cả các hằng số đã có được liệt kê phía bên trong kiểu Color. Việc tiến hành gán những giá trị khác kiểu Color sẽ tạo ra lỗi về phương diện cú pháp.

Color backgroundColor = 5; //errorBây giờ mình sẽ chọn ra bất kì một hằng số thuộc kiểu màu sắc để gán cho thay đổi backgroundColor.

Color backgroundColor = COLOR_GREEN;Các bạn cần để ý rằng, biến kiểu enum chỉ hoàn toàn có thể được gán giá bán trị là một trong số các hằng vẫn khai báo bên trong kiểu dữ liệu của bao gồm nó, ko thể sử dụng hằng của hình trạ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 backgroundColor = TEST1; //this line makes an errorCompiler sẽ thông báo lỗi: "a value of type kiểm tra cannot be used lớn initialize an entity of type Color".

Những lấy một ví dụ về việc thực hiện enum

Sau khi đang gán quý hiếm cho biến kiểu enum, vươn lên là này sẽ có giá trị là một số trong những nguyên, và bạn có thể sử dụng biến này nhằm in ra, tính toán, so sánh, truyền vào hàm theo phong cách giá trị, ... Cùng còn nhiều mục tiêu khác.

Xem thêm: Lòng Trắng Trứng Vịt Có Tác Dụng Gì, Bạn Biết Gì Về Lòng Trắng Trứng

Trên thực tế, họ thường sử dụng kiểu enum để mang ra chắt lọc hàm hoặc thủ tục để thực thi. Ví dụ:

Thông thường, sau từng nhãn case họ sẽ đặt một quý hiếm số nguyên ứng với từng trường hợp, tuy nhiên bây giờ bạn có thể thay núm những số lượng bằng những định danh của enum. Trước đây khi làm việc với câu lệnh switch-case, chúng ta có thể bỏ sót một số trường hợp cần xem xét nếu số lượng các trường vừa lòng là quá nhiều. Dẫu vậy khi áp dụng Visual studio 2015 và kiểu dáng enum, họ sẽ tránh được sự thiếu hụt sót này. Dưới đây là cách mà Visual studio 2015 hổ trợ mang lại kiểu enum:

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