열거형은 변수 타입 중 하나로 다음과 같이 씁니다.
enum [(타입 이름)] {
(멤버1)[=(값)],
(멤버2)[=(값)],
(멤버3)[=(값)],
...
}[(변수명)];
enum Fruit {
APPLE,
BANANA,
GRAPE
}fruit;
//Fruit fruit;도 가능
fruit = APPLE;//fruit = Fruit::APPLE;도 가능
이런 식으로 값의 종류가 숫자나 문자가 아닌 여러 멤버를 갖고 있습니다.
이 멤버들은 내부적으로는 숫자(int)로 취급됩니다.
이 멤버들에 =(값)을 하지 않으면 첫 번째 값은 0이 되고 그 뒤로 =(값)을 한 부분 또는 끝까지 1씩 증가합니다.
enum Animal {
DOG,//0
CAT,//1
PIG = 3,//3
COW//4
}animal;
열거형들은 기본값으로 int로 취급되지만 이를 바꾸긴 위해서
enum Animal :unsigned char {
DOG,
CAT,
PIG,
COW
};
이렇게 뒤에 타입명을 붙여서 바꿀 수 있습니다. 단, 실수 등의 정수형이 아닌 타입은 사용할 수 없고, unsigned (타입)으로 바꾸고 멤버 값에 음수가 포함되면 예기치 못한 값이 될 수 있습니다.
그런데 여러 개의 열거형을 사용하면 이름이 겹칠 수 있는데 이에 따른 오류를 방지하기 위해서 enum class를 사용합니다. 이것은 C++11 이상부터 지원됩니다.
enum class Student {
JAMES,
DONALD,
BROWN,
TIMMY
};
enum class Color {
RED,
BLUE,
BROWN,
BLACK
};
Student student = Student::BROWN;
Color color = Color::BROWN;
enum과 달리 반드시 타입::멤버 형식으로 접근해야 되지만 그렇기 때문에 멤버 이름이 중복돼도 정상적으로 사용할 수 있습니다.
추가 : C언어에서는 구조체와 마찬가지로 열거형 변수를 정의할 때 앞에 enum을 붙여야 합니다.
'C, C++' 카테고리의 다른 글
typedef (0) | 2019.12.24 |
---|---|
함수 포인터 (0) | 2019.12.22 |
#pragma warning (2) | 2019.12.20 |
#pragma once (0) | 2019.12.19 |
미리 정의된 매크로 (0) | 2019.12.19 |