● 사용자 정의 타입
struct : 구조체
enum : 열거, 나열체
union : 공용체
- enum : 열거자 하나하나를 심볼로 만들어 준다.
enum 타입명(생략가능) charater
{
기사 =0, (정수형은 암묵적으로 형변환을 해준다)
엘프,
법사,
군주,
}
- union : 제일큰 자료형의 메모리를 할당하고 그것을 공유
union u
{
int a;
int b;
}
운영체제로부터 메모리공간 어딘가에 해당자료형 만큼의 공간을 할당 받고 그위에 a라는 문을 달고 그안에는 쓰레기 값이 들어있다.
- struct
struct A
{
int a; (4 byte) ← 맴버변수
char b; (1 byte)
int c; (4 byte)
}
총 할당된 바이트 12 byte
클래스의 특징
가장큰 바이트로 끊어서 할당하기 때문에 본래 할당되어야할 바이트보다 더 많이 할당되는 경우가 있음 위에 처럼 원래는 9바이트가 맞는거지만 맴버변수중 가장큰 바이트인 4바이트씩 끊어서 계산하면 1바이트가 남게 되고 그 1바이트를 위해 클래스는 기꺼이 4바이트를 더 할당한다. 그렇기 때문에 3바이트 더 많은 12바이트가 할당된 것.
이때 나머지 3바이트는 패딩비트라 불리운다.
A B
char int
int char
short short
double double
24 16
A : 자리배치 잘 안된예
B : 자리배치 잘 된 예
이렇게 배치 순서에 따라서 갈릴 수도 있다.
그러나 자리배치가 잘 안된 A도
#pragma pack(push,1)
#pragma pack(pop)
을 쓰면 잘 정리될 수 있다는듯???
- typedef
명령어를 이용해서 타입 재정의(전처리기 아님 재정의)
- 구조체 특징 2
1. C++의 구조체는 함수도 포함 할수 있다.
2. 생성자와 소멸자도 있다.
3. 맴버함수 분할도 가능하다.
4. 생성자는 오버로딩이 가능하다.
5. 구조체에서 int a : 4 는 4bit만 쓴다는 말이다.
사용자 정의타입은 출력하거나 기본연산이나 못한다.
얼마나 어떻게 봐야하는지 모르기 대문
자신한테 자기가 하면 Over랩 strcat 조심(가독성)