구조체
- C++의 기본 타입을 가지고 사용자가 새롭게 정의할 수 있는 사용자 정의 타입
- 기본 타입으로는 나타낼 수 없는 복잡한 데이터를 표현 가능
- 멤버 (또는 멤버 변수) : 구조체를 구성하는 변수
- 변수뿐 아니라 함수까지도 멤버로 가질 수 있음
- 객체 지향 프로그래밍의 핵심이 되는 클래스의 기초가 됨
구조체, 구조체 변수 선언
struct 구조체이름
{
멤버1의타입 멤버1이름;
멤버2의타입 멤버2이름;
...
};
struct 구조체이름 구조체변수명;
구조체 멤버로의 접근
구조체변수이름.멤버변수이름
ex.
struct Book web_book; // 구조체변수 선언
web_book.author; // 멤버 참조 연산자(.) 사용하여 구조체 멤버에 접근
구조체 변수 초기화
- 구조체 정의에서 멤버가 정의된 순서에 따라 차례대로 초깃값이 설정됨
- 나머지 멤버는 0으로 초기화됨
구조체변수이름 = { 멤버1초깃값, 멤버2초깃값, ... };
ex.
web_book = { "홍길동", 1000 };
함수와 구조체
C++는 구조체 (또는 구조체를 가리키는 포인터, 구조체의 멤버 변수) 를
- 함수 호출시 전달되는 인수
- 함수 종료될 때 반환되는 return 값 (장점: 한 번에 여러 개의 데이터를 반환할 수 있음)
으로도 사용 가능
-> 장점 : 함수가 원본 구조체의 복사본을 가지고 작업하기 때문에 안전! (구조체 가리키는 포인터 사용한 호출은 예외)
-> 구조체를 가리키는 포인터를 인수로 전달하는 것의 장점 : 복사본이 아니라 주소 하나만 전달하므로 빠름 (단, 원본 데이터의 보호 측면에서는 매우 위험 -> const 키워드를 사용하여 인수를 함수 내에서 직접 수정할 수 없게 하는 게 좋음)
중첩된 구조체
구조체 정의할 시, 멤버 변수로 또 다른 구조체를 포함할 수 있음
구조체의 크기
=> 멤버 변수들의 크기로 결정됨. but 언제나 멤버 변수들의 크기 총합과 일치하는 것은 아님!
byte padding (바이트 패딩)
- 컴파일러가 메모리의 접근을 쉽게 하기 위해, 크기가 가장 큰 멤버 변수를 기준으로 모든 멤버 변수의 메모리 크기를 맞춤
- padding byte (패딩 바이트) : 바이트 패딩으로 추가되는 byte
공용체
- union 키워드 사용
- 순서가 규칙적이지 않고, 미리 알 수 없는 다양한 타입의 데이터를 저장하도록 설계된 타입
- 크기가 가장 큰 멤버 변수 크기만큼의 메모리를 할당받음
- 모든 멤버가 하나의 메모리 공간을 공유한다는 점을 제외하면 구조체와 같음
- 즉, 공용체는 한 번에 하나의 멤버 변수만을 사용할 수 있음 -> 공용체에 저장된 데이터의 의미는, 값을 저장할 때 어떤 멤버 변수를 사용했는지에 따라 달리 해석됨
union Share {
unsigned char a;
unsigned short b;
unsigned int c;
};
Share var;
var.c = 0x12345678;
cout << hex;
cout << var.a << " ";
cout << var.b << " ";
cout << var.c;
결과: x 5678 12345678
열거체
- enum 키워드 사용
- 새로운 타입을 선언하면서 동시에 그 타입이 가질 수 있는 정수형 상숫값도 명시
- 상숫값 따로 명시하지 않으면 0부터 시작해 자신보다 바로 앞의 상숫값보다 1만큼 증가되며 정의됨
- 열거체를 사용하면 프로그램 가독성이 높아짐 + 변수가 지니는 값에 의미를 부여할 수 있음
enum Weather { SUNNY = 0, CLOUD = 10, RAIN = 20, SNOW = 30 };
참고)
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
'[공부] > C++' 카테고리의 다른 글
[C++] 기본 정리 10 - C++ 함수(참조자, 디폴트 인수, 오버로딩) (0) | 2024.02.22 |
---|---|
[C++] 기본 정리 9 - 함수, 재귀 호출, 함수 포인터 (0) | 2024.02.20 |
[C++] 기본 정리 7 - 동적 메모리 할당, 문자열 (1) | 2024.02.20 |
[C++] 기본 정리 6 - 배열, 포인터, 문자열 (0) | 2024.02.19 |
[C++] 기본 정리 5 - 제어문 (0) | 2024.02.19 |