Menu
Coddy logo textTech

사각형 구현

Coddy C 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 46번째.

challenge icon

챌린지

쉬움

Circle에서 했던 것과 마찬가지로, 기본 Shape 구조체를 포함하는 또 다른 구체적인 도형인 Rectangle을 구현하여 Shape Drawer 프로젝트를 계속해서 만들어 보겠습니다.

기존 프로젝트를 바탕으로, 다음 파일들에 사각형(rectangle) 기능을 추가하게 됩니다:

  • shape.h: 이전 레슨에서 만든 DrawFuncAreaFunc 함수 포인터 타입을 포함하는 기본 Shape 인터페이스를 유지합니다.
  • circle.hcircle.c: 이전 레슨에서 구현한 Circle 구현을 유지합니다.
  • rectangle.h: 여기에 Rectangle 구조체를 정의합니다. 사각형은 Shape첫 번째 멤버로 포함하며, widthheight 필드(둘 다 double)를 추가합니다. 너비(width)와 높이(height) 매개변수를 받아 Rectangle을 값으로 반환하는 생성자 함수 create_rectangle을 선언합니다.
  • rectangle.c: 사각형에 특화된 동작을 구현합니다:
    • draw_rectangleDrawing Rectangle with width: X.XX and height: X.XX를 출력합니다 (두 값 모두 소수점 2자리까지 표시).
    • area_rectangle — 너비 × 높이를 반환합니다.
    • create_rectangleRectangle을 초기화하고, 포함된 Shape의 함수 포인터를 사각형 함수들에 연결하며, 치수를 설정하고 사각형을 반환합니다.
  • main.c: 동일한 인터페이스를 통해 두 도형이 작동하는 것을 보여줍니다. 사각형의 너비와 높이라는 두 개의 입력을 읽습니다. 생성자를 사용하여 사각형을 생성한 다음, 포함된 Shape의 함수 포인터를 통해 drawarea를 모두 호출합니다. 면적을 소수점 2자리까지 출력합니다.

프로그램은 widthheight라는 두 개의 입력값(부동 소수점 숫자)을 받습니다.

입력이 4.03.0일 때의 출력 예시:

Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00

입력이 7.52.5일 때의 출력 예시:

Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75

Circle과 마찬가지로, Rectangle은 Shape를 첫 번째 멤버로 포함하므로 포함된 멤버를 통해 함수 포인터에 접근할 수 있습니다. 이러한 일관된 패턴이 다형성을 가능하게 하며, 두 도형 모두 Shape 인터페이스를 통해 균일하게 처리될 수 있습니다. 모든 헤더 파일에 include guard를 사용하는 것을 잊지 마세요.

직접 해보기

#include <stdio.h>
#include "shape.h"
#include "rectangle.h"

int main() {
    double width, height;
    scanf("%lf", &width);
    scanf("%lf", &height);
    
    // TODO: create_rectangle(width, height)를 사용하여 사각형을 생성하세요.
    
    // TODO: 내장된 Shape의 함수 포인터를 통해 draw를 호출하세요.
    
    // TODO: 내장된 Shape의 함수 포인터를 통해 area를 호출하세요.
    // TODO: 면적을 소수점 둘째 자리까지 출력하세요: "Area: %.2f\n"
    
    return 0;
}

Object Oriented Programming의 모든 레슨