Menu
Coddy logo textTech

원 구현

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

challenge icon

챌린지

쉬움

기본 Shape 구조체를 포함하고 자체적인 그리기 및 면적 계산 로직을 제공하는 구체적인 도형인 Circle을 구현하여 Shape Drawer 프로젝트를 계속해서 만들어 보겠습니다.

이전 레슨의 기초를 바탕으로, 다음 파일들을 사용하여 프로젝트를 확장합니다:

  • shape.h: DrawFuncAreaFunc 함수 포인터 타입을 포함한 이전 레슨의 기본 Shape 인터페이스를 유지합니다.
  • circle.h: 여기에 Circle 구조체를 정의합니다. 원은 Shape첫 번째 멤버로 포함하며(업캐스팅을 위한 첫 번째 멤버 규칙 활성화), double 타입의 radius 필드를 추가합니다. 반지름을 인자로 받아 Circle을 값으로 반환하는 생성자 함수 create_circle을 선언합니다.
  • circle.c: 여기에 원 전용 동작을 구현합니다:
    • draw_circleDrawing Circle with radius: X.XX를 출력합니다 (반지름은 소수점 둘째 자리까지 표시)
    • area_circle — π × radius²를 반환합니다 (π 값으로 3.14159를 사용하세요)
    • create_circleCircle을 초기화하고, 포함된 Shape의 함수 포인터가 draw_circlearea_circle을 가리키도록 연결하며, 반지름을 설정하고 원을 반환합니다.
  • main.c: 모든 것을 하나로 합칩니다. 입력으로 반지름 값을 읽고, 생성자를 사용하여 원을 만든 다음, 포함된 Shape의 함수 포인터를 통해 drawarea를 모두 호출합니다. 면적을 소수점 둘째 자리까지 출력합니다.

프로그램은 하나의 입력을 받습니다: radius 값 (부동 소수점 숫자).

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

Drawing Circle with radius: 5.00
Area: 78.54

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

Drawing Circle with radius: 3.50
Area: 38.48

핵심은 Circle이 첫 번째 멤버로 Shape를 포함하고 있으므로, circle.base.drawcircle.base.area(또는 포함된 멤버에 지정한 이름)를 통해 함수 포인터에 접근할 수 있다는 점입니다. 이러한 함수를 호출할 때는 Shape 멤버에 대한 포인터를 전달하세요. 모든 헤더 파일에 인클루드 가드(include guards)를 사용하는 것을 잊지 마세요.

직접 해보기

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

int main() {
    double radius;
    scanf("%lf", &radius);
    
    // TODO: create_circle를 사용하여 Circle 생성
    
    // TODO: 포함된 Shape의 함수 포인터를 통해 draw 호출
    
    // TODO: 포함된 Shape의 함수 포인터를 통해 area 호출
    // 그리고 소수점 2자리까지 출력: "Area: %.2f\n"
    
    return 0;
}

Object Oriented Programming의 모든 레슨