[c언어] C 언어에서의 상속 구현

C 언어는 명시적 상속을 지원하지는 않지만, 구조체와 포인터를 이용하여 상속과 유사한 기능을 구현할 수 있습니다.

구조체를 이용한 상속

구조체를 사용하여 상속을 구현할 수 있습니다. 예를 들어, 부모 클래스와 자식 클래스가 있을 때, 자식 클래스에 부모 클래스의 구조체를 첫 번째 멤버로 포함시킵니다. 아래는 이를 구현한 예제 코드입니다.

#include <stdio.h>

// 부모 클래스
struct Parent {
    int parentData;
};

// 자식 클래스
struct Child {
    struct Parent parent;
    int childData;
};

int main() {
    // 자식 클래스의 인스턴스 생성
    struct Child myChild;
    myChild.parent.parentData = 10;
    myChild.childData = 20;

    // 값 출력
    printf("Parent Data: %d\n", myChild.parent.parentData);
    printf("Child Data: %d\n", myChild.childData);

    return 0;
}

위 코드에서 struct Child 구조체 내에 struct Parent를 첫 번째 멤버로 포함시켜 상속을 구현했습니다.

함수 포인터를 이용한 상속

또 다른 방법은 함수 포인터를 사용하여 상속을 구현하는 것입니다. 각 클래스에 대해 함수 포인터를 사용하여 해당 클래스에 대한 메서드를 가리키게 합니다. 아래는 이를 구현한 예제 코드입니다.

#include <stdio.h>

// 부모 클래스
struct Parent {
    int (*getData)(struct Parent *);
};

// 자식 클래스
struct Child {
    struct Parent parent;
    int data;
};

int getChildData(struct Parent *p) {
    struct Child *c = (struct Child *)p;
    return c->data;
}

int main() {
    // 메서드 설정
    struct Parent myParent;
    myParent.getData = getChildData;

    // 자식 클래스의 인스턴스 생성
    struct Child myChild;
    myChild.parent = myParent;
    myChild.data = 10;

    // 값 출력
    printf("Child Data: %d\n", myChild.parent.getData(&myChild.parent));

    return 0;
}

위 코드에서 struct Parent 구조체 내에서 getData 함수 포인터를 사용하여 파생 클래스에 대한 메서드를 가리키도록 만들어 상속을 구현했습니다.

이와 같이 C 언어에서는 구조체와 포인터를 이용하여 상속과 유사한 개념을 구현할 수 있습니다.

참고문헌: