Minwoo Dev.
[C++] 윤성우의 열혈 C++ 프로그래밍 Ch04-1 : 정보 은닉과 const 문제풀이 본문
728x90
반응형
SMALL
문제
Chapter 03에서 제시한 과일장수 시뮬레이션 예제 FruitSaleSim1.cpp에서 정의한 두 클래스의 멤버변수는 private로 선언이 되어있다.
그러나 다음 조건을 유지할 수 있는 장치는 아무것도 되어있지 않다.
- 사과의 구매를 목적으로 0보다 작은 수를 전달할 수 없다.
위의 제약사항을 항상 만족시킬 수 있도록 예제를 변경하고, 예제의 안전성을 높일 수 있도록 일부 함수를 const로 선언해보자.
FruitSaleSim1.cpp
#include <iostream>
using namespace std;
class FruitSeller
{
private:
int APPLE_PRICE;
int numOfApples;
int myMoney;
public:
void InitMembers(int price, int num, int money)
{
APPLE_PRICE = price;
numOfApples = num;
myMoney = money;
}
int SaleApples(int money)
{
int num = money / APPLE_PRICE;
numOfApples -= num;
myMoney += money;
return num;
}
void ShowSalesResult()
{
cout << "남은 사과 : " << numOfApples << endl;
cout << "판매 수익 : " << myMoney << endl;
}
};
class FruitBuyer
{
int myMoney;
int numOfApples;
public:
void InitMembers(int money)
{
myMoney = money;
numOfApples = 0;
}
void BuyApples(FruitSeller &seller, int money)
{
numOfApples += seller.SaleApples(money);
myMoney -= money;
}
void ShowBuyResult()
{
cout << "현재 잔액 : " << myMoney << endl;
cout << "사과 개수 : " << numOfApples << endl;
}
};
int main(void)
{
FruitSeller seller;
seller.InitMembers(1000, 20, 0);
FruitBuyer buyer;
buyer.InitMembers(5000);
buyer.BuyApples(seller, 2000);
cout << "과일 판매자의 현황" << endl;
seller.ShowSalesResult();
cout << "과일 구매자의 현황" << endl;
buyer.ShowBuyResult();
return 0;
}
정답
#include <iostream>
using namespace std;
class FruitSeller
{
private:
int APPLE_PRICE;
int numOfApples;
int myMoney;
public:
void InitMembers(int price, int num, int money)
{
APPLE_PRICE = price;
numOfApples = num;
myMoney = money;
}
int SaleApples(int money)
{
if (money < 0)
{
cout << "입력이 잘못되었습니다." << endl;
return 0;
}
int num = money / APPLE_PRICE;
numOfApples -= num;
myMoney += money;
return num;
}
void ShowSalesResult() const
{
cout << "남은 사과 : " << numOfApples << endl;
cout << "판매 수익 : " << myMoney << endl;
}
};
class FruitBuyer
{
int myMoney;
int numOfApples;
public:
void InitMembers(int money)
{
myMoney = money;
numOfApples = 0;
}
void BuyApples(FruitSeller &seller, int money)
{
if (money < 0)
{
cout << "입력이 잘못되었습니다." << endl;
return;
}
numOfApples += seller.SaleApples(money);
myMoney -= money;
}
void ShowBuyResult() const
{
cout << "현재 잔액 : " << myMoney << endl;
cout << "사과 개수 : " << numOfApples << endl;
}
};
int main(void)
{
FruitSeller seller;
seller.InitMembers(1000, 20, 0);
FruitBuyer buyer;
buyer.InitMembers(5000);
buyer.BuyApples(seller, -2); // 0보다 작은 값 입력됨
cout << "과일 판매자의 현황" << endl;
seller.ShowSalesResult();
cout << "과일 구매자의 현황" << endl;
buyer.ShowBuyResult();
return 0;
}
결과
728x90
반응형
LIST
'C++' 카테고리의 다른 글
[C++] 윤성우의 열혈 C++ 프로그래밍 Ch04-3 : C++ 기반의 데이터 입출력 문제풀이 (0) | 2024.03.09 |
---|---|
[C++] 윤성우의 열혈 C++ 프로그래밍 Ch04-2 : 다양한 클래스의 정의 문제풀이 (1) | 2024.03.09 |
[C++] 윤성우의 열혈 C++ 프로그래밍 Ch03-2 : 클래스의 정의 문제풀이 (0) | 2024.03.06 |
[C++] 윤성우의 열혈 C++ 프로그래밍 Ch03-1 : 구조체 내에 함수 정의하기 문제풀이 (0) | 2024.03.05 |
[C++] 윤성우의 열혈 C++ 프로그래밍 Ch02-4 : C++의 표준함수 호출 문제풀이 (0) | 2024.03.04 |