📙 열거 타입
무언가를 제한하고 싶다면 enum 타입을 사용한다.
enum class numBer {King, Queen, Rook, Pawn };
numBer a{ numBer::Rook };
-> enum 타읍을 구성하는 멤버는 내부적을 정숫값으로 표현된다. {0, 1, 2, 3}
◾ 멤버마다 할당되는 값을 별도로 지정 할 수도 있다.
enum class PieceType
{
king= 1,
Queen,
Rook = 10,
Pawn,
};
PieceType piece{ PieceType::king };
PieceType piece1{ PieceType::Queen };
PieceType piece2{ PieceType::Rook };
PieceType piece3{ PieceType::Pawn };
-> 열거 타입의 멤버에 값을 따로 할당하지 않으면 컴파일러는 이전 멤버의 값에 1을 더한 값으로 알아서 할당한다.
◾ 상위 스코프에 똑같은 이름이 있더라도 충돌되지 않는다.
int main()
{
enum class State { UnKnown, Started, Finished};
enum class Error{ None, UnKonwn};
return 0;
}
-> 서로 다른 열거 타입에 동일한 이름의 멤버가 존재할 수 있다.
◾ C++ 20 부터는 using enum 으로 선언하면 열거값을 길게 풀어 쓰지 않아도 된다.
using enum PieceType;
PieceType mango{ Rook };
// PieceType piece2{ PieceType::Rook };
-> 이 기능은 조심해서 사용해야 한다. 스코픅 너무 크면 이름이 충돌하는 현상이 발생할 수 있다.
📗 예전 방식의 열거 타입
◾ 예전에 작성된 레거시 코드에서는 enum class 가 아닌 enum 으로 선언했다.
int main()
{
enum pieceTypes { King, Queen, Rook, Pawn };
pieceTypes abc{ king };
return 0;
}
-> 이러게 사용하면 상위 스코프에 같은 이름이 있으면 컴파일 에러가 발생한다.
-> 예전 방식으로 열거 타입을 정의할 때는 멤버 이름을 고유한 이름으로 지정해야 한다.
-> 하지만 예전 방식은 강타입이 아니므로 안전하지 않아서 잘 사용하지 않는다.
'C++ > C++ 기초 문법' 카테고리의 다른 글
[C++] 조건문 if , switch 문 (0) | 2023.12.23 |
---|---|
[C++] 구조체 (0) | 2023.12.23 |
[C++] 인라인(inline) 함수 (0) | 2023.12.22 |
[C++] 매개변수의 디폴트 값 (0) | 2023.12.21 |
[C++] 함수 오버로딩 (0) | 2023.12.21 |