요약: 계산기 디스패치
Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 37번째.
챌린지
쉬움dispatch table을 사용하여 계산기를 만드세요. operation code를 해당 함수에 매핑하는 함수 pointer의 array를 만든 다음, 이를 사용하여 계산을 수행합니다.
다음 작업을 수행하는 프로그램을 작성하세요:
- 두
intparameters를 받고int를returns하는 function pointer를 위한typedefOperation을 만듭니다. - 네 개의 arithmetic functions를 정의합니다:
add: a + b를 returnssub: a - b를 returnsmul: a * b를 returnsdivide: a / b를 returns (정수 나눗셈)
main에서 dispatch table을 만듭니다. 이는 4개의Operationfunction pointers로 이루어진 array이며, index 0은 add, index 1은 sub, index 2는 mul, index 3은 divide입니다.- 세 개의 입력을 읽습니다: 두 개의 정수와 operation code (0-3)
- operation code를 사용하여 dispatch table의 index로 삼고 appropriate function을 call합니다.
- result를 출력합니다.
세 개의 입력을 받습니다: 첫 번째 숫자, 두 번째 숫자, 그리고 operation code (add는 0, sub는 1, mul은 2, divide는 3).
출력은 operation의 result인 단일 정수여야 합니다:
7입력이 10, 3, 1인 이 예제에서는 operation code 1이 dispatch table에서 sub를 선택하므로, 10 - 3 = 7을 계산합니다.
여기서 핵심은 array indexing을 사용하여 function을 선택하는 것입니다. if 또는 switch statements가 필요하지 않습니다. dispatch table은 다음과 같은 형태여야 합니다:
Operation ops[4] = {add, sub, mul, divide};그런 다음 다음과 같이 function을 call합니다: ops[code](a, b)
직접 해보기
#include <stdio.h>
// TODO: 함수 포인터를 위한 'Operation'이라는 typedef 생성
// 두 개의 int 매개변수를 받고 int를 반환하는
// TODO: 네 개의 산술 함수 정의: add, sub, mul, divide
int main() {
// 입력 읽기
int a, b, code;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &code);
// TODO: 디스패치 테이블 생성 (Operation 함수 포인터 4개의 배열)
// Operation ops[4] = { ... };
// TODO: 연산 코드를 사용하여 적절한 함수 호출
// 그리고 결과 저장
int result;
// 결과 출력
printf("%d\n", result);
return 0;
}객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 C 컴파일러