사각형 구현
Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 46번째.
챌린지
쉬움Rectangle을 구현하여 Shape Drawer 프로젝트를 계속 완성해 봅시다. Rectangle은 기본 Shape 구조체를 포함하는 또 하나의 구체적인 도형으로, Circle에서 했던 방식과 같습니다.
기존 프로젝트를 기반으로 다음 파일 전체에 사각형 기능을 추가합니다.
shape.h: 이전 레슨에서 만든DrawFunc및AreaFunc함수 포인터 형식과 기본Shape인터페이스를 유지합니다.circle.h및circle.c: 이전 레슨의 Circle 구현을 유지합니다.rectangle.h: 여기에Rectangle구조체를 정의합니다. 사각형은Shape을 first member로 포함하고,width및height필드(double형식)를 추가합니다. width와 height 매개변수를 받아 값으로Rectangle을 반환하는 생성자 함수create_rectangle을 선언합니다.rectangle.c: 사각형에 특화된 동작을 구현합니다.draw_rectangle:Drawing Rectangle with width: X.XX and height: X.XX를 출력합니다(두 값 모두 소수점 이하 2자리로 표시).area_rectangle: width × height를 반환합니다.create_rectangle:Rectangle을 초기화하고, 포함된Shape의 함수 포인터를 사각형 함수에 연결하며, 크기를 설정한 후 사각형을 반환합니다.
main.c: 동일한 인터페이스를 통해 두 도형이 모두 작동하는 모습을 보여 줍니다. 두 입력값, 즉 사각형의 width와 height를 읽습니다. 생성자를 사용하여 사각형을 만든 다음, 포함된Shape의 함수 포인터를 통해draw와area를 모두 호출합니다. area를 소수점 이하 2자리로 출력합니다.
프로그램은 두 개의 입력값, 즉 width와 height 값(부동 소수점 수)을 받습니다.
입력값이 4.0 및 3.0일 때의 출력 예시:
Drawing Rectangle with width: 4.00 and height: 3.00
Area: 12.00입력값이 7.5 및 2.5일 때의 출력 예시:
Drawing Rectangle with width: 7.50 and height: 2.50
Area: 18.75Circle과 마찬가지로 Rectangle은 Shape을 first member로 포함하므로, 포함된 member를 통해 함수 포인터에 액세스할 수 있습니다. 이 일관된 패턴을 통해 다형성이 가능해집니다. 두 도형을 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: 소수점 2자리로 면적을 출력하세요: "Area: %.2f\n"
return 0;
}객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 C 컴파일러