Menu
Coddy logo textTech

요약: 도형 계층 구조

Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 32번째.

challenge icon

챌린지

쉬움

구성을 통한 상속의 강력함을 보여 주는 완전한 도형 계층 구조를 만들어 보겠습니다. 모든 구체적인 도형이 상속할 수 있는 기본 Shape 타입을 만든 다음, 이를 확장하는 Rect를 만듭니다.

코드를 세 개의 파일로 구성합니다.

  • shape.h: include guard를 사용하여 struct 계층 구조를 정의합니다. 단일 color 필드(정수)를 가진 Shape struct를 만듭니다. 그런 다음 Shape을 첫 번째 멤버로 포함하고 widthheight 필드(둘 다 정수)를 추가하는 Rect struct를 정의합니다. Shape*과 새로운 색상 값을 받는 set_color 함수와 Rect*를 받는 print_rect 함수, 두 함수를 선언합니다.
  • shape.c: 두 함수를 모두 구현합니다. set_color 함수는 기본 타입과 함께 동작합니다. 이 함수는 어떤 도형의 색상이든 수정합니다. print_rect 함수는 상속된 색상을 포함하여 직사각형의 모든 정보를 표시합니다.
  • main.c: Rect를 만들고 모든 필드를 초기화합니다. 그런 다음 직사각형을 Shape*으로 캐스팅하여 set_color를 호출하는 방식으로 업캐스팅을 보여 줍니다. 마지막으로 직사각형을 출력하여 기본 타입 포인터를 통해 색상이 변경되었는지 확인합니다.

네 개의 입력을 받습니다. 직사각형의 width, 직사각형의 height, initial color, 그리고 일반 함수를 통해 설정할 new color입니다.

main 파일에서 초기 값으로 직사각형을 만든 다음, set_color를 사용하여 색상을 새로운 값으로 변경합니다(Rect*Shape*으로 캐스팅해야 한다는 점을 기억하세요). 마지막으로 print_rect를 호출하여 결과를 표시합니다.

출력은 다음과 같아야 합니다.

Width: 10
Height: 5
Color: 7

여기서 10은 width, 5는 height, 7은 업데이트된 색상(initial color가 아님)입니다. 여기서 핵심은 set_color가 직사각형에 대해 아무것도 모른다는 점입니다. 이 함수는 Shape과만 동작합니다. 하지만 first member 규칙과 업캐스팅을 통해 이 일반 함수로 직사각형의 색상을 수정할 수 있습니다.

직접 해보기

#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;
}

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 C 컴파일러