반응형
C++에서는 Class가 있지만 stuct 형태도 사용 가능하다.
C에서 사용하던 형태와 C++ 차이가 존재한다.
[C] Struct
C언어 구조체 안에는 변수만 둘 수 있다.
그래서 구조체 함수를 외부에 두어야 한다.
[C style 예시 코드]
#include <stdio.h>
struct st
{
int no;
char ch;
};
void InitStruct(struct st* t, int n, char c);
void PrintStruct(const struct st* t);
int main()
{
struct st harbang;
InitStruct(&harbang, 2024, 'B');
PrintStruct(&harbang);
}
void PrintStruct(const struct st* t)
{
printf("%d %c\n", t->no, t->ch);
}
void InitStruct(struct st* t, int n, char c)
{
t->no = n;
t->ch = c;
}
함수 선언문을 전부 위에 둘 수도 있지만
변수 접근성이나 구조적 이해를 위해서 따로 두기도 한다.
구조체 안에 두면 구조체 양에 따라 한눈에 파악하기 어려울 수 있어
함수 선언을 먼저 해두고, 구현을 코드 아래쪽에서 하는 편이다.
중요한 것은 호출보다 선언이 먼저 존재해야 한다.
구조체 변수 주소를 인자로 전달해준다.
[C++] Struct
• C와 달리 C++에서는 구조체와 관련된 함수를 소속 구조체 안에 둘 수 있다.
• struct 키워드 없이 구조체 이름만으로 선언 가능
• 구조체 이름 = 데이터 타입(data type)
C++ style 예시 코드
#include <stdio.h>
struct st
{
int no;
char ch;
void PrintStruct(void) const
{
printf("%d %c\n", no, ch);
}
void InitStruct(int n, char c)
{
no = n;
ch = c;
}
};
int main()
{
st harbang;
// 인자에 구조체 주소를 보내지 않고 구조체 변수 변경이 가능
harbang.InitStruct(2024, 'B');
harbang.PrintStruct();
printf("%d", harbang.no);
}
Q) 함수를 구조체 안에 포함시킨 이유
C에서는 구조체 함수 외부에 두어야 했는데
코드 재사용시 양이 많아지면 구조 파악이 어려울 수 있다.
Q) 구조체 안에 함수를 포함시키면서 얻는 이점
구조체 변수 주소를 보내지 않고도 구조체 내부 변수 변경 가능
코드 구조 파악이 용 (재사용성 증가)
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] likely, unlikey 키워드 구문 (5) | 2024.11.10 |
---|---|
[C/C++] 패딩 비트 (Padding Bit) (2) | 2024.11.09 |
[C/C++] #define과 const 차이 (7) | 2024.11.02 |
[C++] auto 키워드 (4) | 2024.10.28 |
[C/C++] union 공용체 (2) | 2024.10.27 |
댓글