=> 다양한 데이터 유형을 결합해서 하나의 변수로 구조화하는 것
struct PERSON // PERSON이라는 Struct Type 선언
{
int a;
char b;
} family_member; // Person 구제초에ㅢ 이름을 지정
//Template 사용하는 경우
template<typename T_key, typename T_value> // 똑같이 template를 사용하고 사용
struct Node
{
Node* left;
Node* right;
Node* parent;
T_key key;
T_value value;
Node() : left(nullptr), right(nullptr), parent(nullptr), key(NULL), value(NULL) {}
};
1. 구조체 네이밍
=> 구조체 명은 모든 글자를 대문자로 기입[Class의 경우 앞글자만 대문자]
struct COMPUTER
struct TV
class Electronics
class Personal
2. 구조체 vs class
=> 공통점
-> 객체를 묶어서 하나의 객체처럼 사용함
=> 차이점
-> 선언의 차이.
-> Class는 접근제어 지시자를 선언하지 않을시 default로 private
-> Struct는 접근제어 지시자를 선언하지 않을시 default로 public
3. 구조체 포인터
=> 구조체도 포인터를 생성할 수 있음
=> 생성의 방법은 new와 malloc이 존재함
struct NODE
{
~
};
int main()
{
NODE* node_ptr = (NODE*)malloc(sizeof(NODE)); // 메모리 할당 및 구조체 포인터 선언
struct NODE node_ptr2 = new NODE; // 동적할당 및 구조체 선언
free(node_ptr);
}
4. 구조체의 패딩(padding)
=> 구조체는 메모리 할당 시, 속도 향상을 위하여 크기가 큰 멤버변수를 기준으로 멤버변수의 메모리 크기를 맞춤
=> 채워넣을때, 중간 빈 공간에 들어간 것을 padding bit라고 표현
=> os 32bit는 4byte packing / 64bit는 8byte padding이 빠름
=> 아래 사진에서, c 뒤의 2byte가 padding bit
'C++ > Tips' 카테고리의 다른 글
[c++/c#]Region (0) | 2021.02.09 |
---|---|
[c++]SmartPointer (0) | 2021.02.02 |
[c++]Typename (0) | 2021.01.26 |
[c++]auto (0) | 2021.01.19 |
[c++]volatile (0) | 2021.01.12 |