본문 바로가기
프로그래밍 언어/C++

[C/C++] struct 차이 비교

by 까망 하르방 2024. 11. 8.
반응형

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

댓글