728x90
반응형
공용체(Union)
정의
서로 다른 데이터형을 한 시점에 한 가지 데이터만 보관하는 데이터형.
구조체(Struct)와 생김새가 비슷함.
선언
union UnionName
{
타입 멤버변수1
타입 멤버변수2
...
}
특징
- 공용체의 모든 멤버들이 같은 메모리 공간을 사용.
- 동시에 데이터를 저장할 수 없고, 이전 데이터는 소실된다.
- 주로 메모리 절약을 위해 사용됨.
- OS, HW 데이터 구조에 사용.
#include <iostream>
using namespace std;
int main() {
union MyUnion
{
int intVal;
long longVal;
float floatVal;
};
MyUnion test;
test.intVal = 3;
cout << test.intVal << endl;
test.longVal = 33;
cout << test.intVal << endl;
cout << test.longVal << endl;
test.floatVal = 3.3;
cout << test.intVal << endl;
cout << test.longVal << endl;
cout << test.floatVal << endl;
return 0;
}
결과
더보기
3
33
33
1079194419
1079194419
3.3
열거체(Enum)
정의
기호 상수를 만드는 또다른 방법이며, 주로 가독성을 위해 사용.
예를 들어, 아래와 같이 숫자에 해당 개념을 대입하여 코딩하려 할때
0 = 매우 나쁨
1 = 나쁨
2 = 보통
3 = 좋음
4 = 매우 좋음
2이 뭐였는지 헷갈리는 경우가 있다.
그럴 때 '보통'이라는 기호 상수를 사용하면 2의 값을 그대로 사용하면서도 가독성을 높일 수 있다.
선언
enum EnumName { 열거자1, 열거자2, ... };
특징
- 열거체로 정의된 변수는 열거체가 가지고 있는 열거자들만 대입될 수 있다.
- 열거체 안에 포함된 요소들을 열거자라고 한다.
- 열거체 데이터형은 산술연산이 적용되지 않는다.
- 열거자들은 int형 변수에 대입해서 사용 가능하다.
- 열거자들은 수를 지정해주지 않으면, 즉 초기화 하지 않으면 0, 1, 2, 3, ... 순으로 대입된다.
- 열거자들은 초기화할 때 정수만 대입해야하고, 초기화 하지 않은 열거자들은 그 전의 수 + 1이 대입된다.
#include <iostream>
using namespace std;
int main() {
enum spectrum { red, orange, yellow, green, blue, violet, indigo, ultraviolet};
/*
1. spectrum은 나만의 데이터 타입
2. spectrum 안의 각각의 요소들(열거자)이 어떠한 수를 대변한다.
ex) red = 0, orange = 1, ... ultraviolet = 7
*/
spectrum a = orange;
//spectrum a = orange + yellow; 불가능
cout << a << endl;
int b = blue; // 열거자들은 대입 가능
int c = blue + 3; // 열거자들은 대입 가능
cout << b << endl;
cout << c << endl;
return 0;
}
결과
더보기
1
4
7
#include <iostream>
using namespace std;
int main() {
enum spectrum { red = -1, orange, yellow = 4, green = 4, blue, violet, indigo = 11, ultraviolet};
cout << red << endl;
cout << orange << endl;
cout << yellow << endl;
cout << green << endl;
cout << blue << endl;
cout << violet << endl;
cout << indigo << endl;
cout << ultraviolet << endl;
return 0;
}
결과
더보기
-1
0
4
4
5
6
11
12
728x90
반응형
'Software > C++' 카테고리의 다른 글
[C++ 기초] 12. new 연산자와 delete 연산자 (0) | 2023.03.20 |
---|---|
[C++ 기초] 11. 포인터 기초 (0) | 2023.03.20 |
[C++ 기초] 9. 구조체(Struct) (0) | 2023.03.12 |
[C++ 기초] 8. String형 (0) | 2023.03.10 |
[C++ 기초] 7. 사용자 입력 (0) | 2023.03.10 |
댓글