Study: Software(SW)/SW: Language

[C++] 객체지향 프로그래밍: 변수 및 구조체 접근법 정리 (feat. struct vs class)

DrawingProcess 2022. 7. 23. 15:58
반응형

1. 구조체 (struct vs class)

struct

멤버 변수/함수에 대한 기본적으로 제공되는 접근지시자가 public이며, 대게 단순한 데이터를 표현하는데 사용합니다.

class

멤버 변수/함수에 대한 기본적으로 제공되는 접근지시자가 private이며, 대게 기본적으로 제공되지 않는 constructor, operator를 사용하지 않거나 다양한 접근지시자가 필요할 때 사용합니다.

2. 변수 및 구조체 (pointer, reference, struct, class, union, choice, enum 등)

구조체 선언

typedef struct packet1
{
    int data0;
    int* data1;
    union uni{
    	int data2
    	int data3
    }Uni;
}Packet;

+ 구조체 선언: typedef struct VS struct

// i) Struct packet 선언: Recommendation: common ideom
typedef struct packet1
{
	int data0;
	int* data1;
}Packet;
void doit(Packet pac);

// ii) Struct packet 선언: Not Recommendation
struct packet2
{
	int data0;
	int* data1;
};
void doit(struct packet2 pac);
  • typedef를 사용하는 이유?
    • 일반적으로 첫번째와 같은 struct 선언이 object를 생성/호출하기 용이(struct라고 명시할 필요없음)하고,
    • C와의 호환성을 위해서 추천합니다(C에서 typedef를 사용하기에 호환성이 좋음).
      • Packet: 구조체의 테그 포인트, C++에서는 구조체 타입 명으로도 인식합니다.
  • typedef struct <name> { ... }<other name>의 경우,
    struct { ... }; typedef struct <name> <other name>와 동일합니다.

구조체 대입

Packet p;  //Struct Packet 정의
p.data0 = 0;
p.(*data1) = 1;
Packet p;  // Struct Packet 정의
Packet* p_pointer;  // Packet에 대한 Pointer 선언 
p_pointer = &p;  // Pointer 정의 

p_pointer->data0 = 0;

구조체 접근

int data0 = p.data0;
int *data1 = p.data1;

참고

반응형