[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 언어에서는 구조체와 포인터를 이용하여 상속과 유사한 개념을 구현할 수 있습니다.
참고문헌:
- https://www.geeksforgeeks.org/inheritance-in-c/
- https://www.tutorialspoint.com/cprogramming/c_structures.htm