요약: 도형 계층 구조
Coddy C 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 32번째.
챌린지
쉬움컴포지션(composition)을 통한 상속의 강력함을 보여주는 완전한 도형 계층 구조를 만들어 보겠습니다. 모든 구체적인 도형이 상속받을 수 있는 기본 Shape 타입을 만들고, 이를 확장하는 Rect를 구축할 것입니다.
코드는 세 개의 파일로 구성됩니다:
shape.h: 인클루드 가드(include guards)를 사용하여 구조체 계층을 정의합니다. 단일color필드(정수형)를 가진Shape구조체를 만듭니다. 그런 다음Shape를 첫 번째 멤버로 포함하고width와height필드(둘 다 정수형)를 추가하는Rect구조체를 정의합니다. 두 개의 함수를 선언합니다:Shape*와 새로운 색상 값을 받는set_color, 그리고Rect*를 받는print_rect입니다.shape.c: 두 함수를 구현합니다.set_color함수는 기본 타입과 함께 작동하며, 모든 도형의 색상을 수정합니다.print_rect함수는 상속된 색상을 포함하여 사각형의 모든 정보를 표시합니다.main.c:Rect를 생성하고 모든 필드를 초기화합니다. 그런 다음 사각형을Shape*로 캐스팅하여set_color를 호출함으로써 업캐스팅(upcasting)을 시연합니다. 마지막으로 사각형을 출력하여 기본 타입 포인터를 통해 색상이 변경되었는지 확인합니다.
네 개의 입력을 받게 됩니다: 사각형의 너비(width), 높이(height), 초기 색상(initial color), 그리고 제네릭 함수를 통해 설정할 새로운 색상(new color)입니다.
메인 파일에서 초기 값으로 사각형을 생성한 다음, set_color를 사용하여 색상을 새로운 값으로 변경하고(이때 Rect*를 Shape*로 캐스팅해야 함을 기억하세요), 마지막으로 print_rect를 호출하여 결과를 표시합니다.
출력은 다음과 같아야 합니다:
Width: 10
Height: 5
Color: 7여기서 10은 너비, 5는 높이, 7은 업데이트된 색상(초기 색상이 아님)입니다. 여기서 핵심적인 통찰은 set_color가 사각형에 대해 전혀 알지 못하며 오직 Shape와만 작동한다는 점입니다. 그럼에도 불구하고 첫 번째 멤버 규칙과 업캐스팅을 통해, 사각형의 색상이 이 제네릭 함수를 통해 수정됩니다.
직접 해보기
#include <stdio.h>
#include "shape.h"
int main() {
int width, height, initial_color, new_color;
scanf("%d", &width);
scanf("%d", &height);
scanf("%d", &initial_color);
scanf("%d", &new_color);
// TODO: Rect를 생성하고 모든 필드를 초기화하세요
// (width, height, 그리고 포함된 Shape의 color를 initial_color로 설정)
// TODO: 사각형을 Shape*로 캐스팅하여 set_color를 호출하고
// 색상을 new_color로 변경하세요
// TODO: print_rect를 호출하여 결과를 출력하세요
return 0;
}