const를 사용해서 기호 상수를 만드는 것 외에도 다른 방법을 제공한다.
새로운 데이터형을 정의할 수 있게 해주는 것이다.
**다만 주 목적은 아니다.
enum도 구조체 구문과 매우 흡사하다.
enum spectrum
{
red,
orange,
yellow,
green,
blue,
violet,
indigo,
ultraviolet
};
이렇게 수행하게 된다면
spectrum 이라는 새로운 데이터형을 만든다.
**struct 뒤에 구조체의 이름이 나오는 것과 같다.
-> spectrum 이라는 열거체라고 부른다.
red, orange...의 순서대로 나온 것들을 순서대로 0부터 7까지 정수 값을 나타내는 상수로 만든다.
-> red는 0이 된다. ultraviolet은 7이 된다.
** 명시하지 않았을 때는 순서대로 숫자가 정의된다.
그렇다면 spectrum이라는 열거체인 데이터형이 만들어졌다.
spectrum band; // spectrum 데이터형의 변수 선언
열거체 변수에는 그 데이터형을 정의하는 데 사용되는 열거자 값들만 대입할 수 있다.
-> 아까 쓴 red, orange.... 등등
다시 말하면 band는 0~7의 값을 가질 수 밖에 없다.
**그리고 대입연산자만 사용할 수 있다. 산술 연산자를 쓸 수 없다.
band = blue; //가능
band = red + orange // (0 + 1이어서 1이 될 것 같지만) 불가능
** 일부 C++에서는 위의 제한을 지키지 않지만 열거형이 제 역할을 하기 위해서는 지켜줘야 한다.
또한 열거자들이 정수의 값을 가지고 있지만
정수의 값이 열거자가 되지는 않는다.
int color = blue; //즉, blue에 대응하는 정수 값으로 쓰일 수 있다. (O)
band = 3; // int 값인 3이 spectrum 형이 될 수는 없다. (X)
color = 3 + red; // red에 대응하는 정수 값으로 쓰일 수 있다. (O)
다시 말해서
Spectrum형 변수에는 Spectrum에서 열거자로 선언된 아이들만 넣을 수 있다는 말이다.
음.. 왜이렇게 열거체는 복잡한거야?
사실 열거체 자체는 새로운 데이터형을 만들어내기 위해 만든 것이 아니다.
즉, 상호 관련 있는 상수들을 정의하는 용도이다.
대표적인 예를 들면 Swtich 구문에 사용될 기호 상수들을 정의하기 위해 열거체를 사용하는 것이다.
아까도 말했듯이 명시적으로 선언하지 않을 경우 열거자 순서대로 0부터 넣어진다.
다만 명시적으로 선언할 경우 열거자에게 값을 지정해줄 수 있다.
** 선언할 때 같은 값을 갖는 열거자가 있어도 된다.
**21.11.17 업데이트
enum은 Switch와 같이 사용되는 경우가 많다.
enum을 사용하여 서로 관련된 상수들의 한 집합을 정의하고, switch 구문에서 그 상수들을 사용하는 것이다.
**일반적으로 cin은 열거체를 인식하지 않는다.(즉, 해당 선택사항을 int 형으로 받아들인다.)그 int 값을 이용하여 Swtich 구문에 case로 쓰면 되는 것이다.
#include <iostream>
enum ={red, orange, yellow, green, blue, violet, indigo};
using namespace std;
int main()
{
int code;
cin >> code;
//즉, red를 0으로 indigo를 6으로 받아들인다.
while(code >= red && code <= indigo){
switch(code)
{
case red : cout << "빨강\n"; break;
case orange: cout << "오렌지\n"; break;
case yellow: cout <<"노랑\n"; break;
case green : cout <<"초록\n"; break;
case blue : cout <<"파랑\n"; break;
case violet: cout <<"보라\n"; break;
case indigo: cout <<"남색\n"; break;
}
cin >> code;
}
return 0;
}
'프로그래밍 지식 > C++' 카테고리의 다른 글
C++문법/ 생성자와 소멸자 , Constructor & Destructor (0) | 2021.11.24 |
---|---|
C++문법 / 문자열 함수를 위한 cctype (0) | 2021.11.17 |
C++문법 / 포인터, 메모리 해제 (0) | 2021.11.10 |
C++문법/ 공용체, Union (메모리 절약 가능) (0) | 2021.11.09 |
C++ 문법/ 변수, 배열 초기화 [C++] (0) | 2021.11.09 |