← 학습 코스

할인 정책마다 달라지는 요금

C++빈칸 채우기

같은 요청을 서로 다른 정책으로 처리해요

앞 클래스 레슨에서 객체 생성과 부모·자식의 호출을 읽었어요. 이번에는 할인 방법이 다른 두 자식 클래스를 같은 읽기 함수에 전달해요. charge(amount)는 ‘이 금액을 정책에 맞춰 처리한 결과’라는 공통 약속이에요.

부모 charge에 virtual을 붙이고 자식에 같은 시그니처의 override를 두면 부모 참조로 읽어도 실제 정책의 계산이 선택돼요. 상속 선언과 금액 계산이 각각 이 약속에 맞아야 해요.

두 정책을 동시에 적용하는 것과 별도로 읽는 것은 달라요

원래 금액 80원에 25% 할인 정책을 쓰면 80의 75%인 60원이에요. 고정 30원 할인 정책은 50원이에요. 두 정책을 각각 같은 원래 금액에 적용하면 두 결과는 60·50이에요.

25%를 먼저 할인한 60원에서 다시 30원을 빼는 계산은 다른 계약이에요. 또한 양수 정수 나눗셈은 소수 부분을 버려요. 5원의 50%는 이 과제의 반환 규칙에서 2원이에요. 할인액을 먼저 버림한 다음 원금에서 빼는 식과 다를 수 있어요.

직접 풀어봐요

같은 amount원을 두 정책에 각각 적용해요. 비율 정책은 amount×(100−percent)/100의 소수 부분을 버린 요금, 고정 정책은 amount−flat이 음수면 0인 요금이에요. 두 정책의 결과 합을 반환하도록 빈칸을 채워요.

RatioPolicy는 Policy를 public 상속해요. amount·flat은 01000, percent는 0100이에요. 실행용 입력은 amount percent flat, 출력은 반환값이에요. 정책을 연달아 적용하지 않고 각각 같은 amount를 받아요. main은 실행용이에요.

예시 1: (100,20,30) → 150. 비율 결과 80과 고정 결과 70을 더해요. 예시 2: (50,10,80) → 45. 비율 결과 45, 고정 결과는 0이에요.

예시 입력

100 20 30

예상 결과

150

예시 입력

50 10 80

예상 결과

45
핵심 개념
  • oop-inheritance-poly: 같은 가상 호출을 실제 객체별 다른 계산과 연결해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기