/*
Chapter 03에서 제시한 과일장수 시뮬레이션 예제 FruitSaleSim1.cpp에서 정의한 두 클래스의 멤버변수는 private으로 선언이 되어있다.
그러나 다음 조건을 유지할 수 있는 장치는 아무것도 되어있지 않다.
1.사과의 구매를 목적으로 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 << endl;
}
};
class FruitBuyer
{
int myMoney; //private
int numOfApples;//private
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 -1;
}
int num = money / APPLE_PRICE;
numOfApples -= num;
myMoney += money;
return num;
}
void ShowSalesResult() const
{
cout << "남은 사과: " << numOfApples << endl;
cout << "판매 수익: " << myMoney << endl << endl;
}
};
class FruitBuyer
{
int myMoney; //private
int numOfApples;//private
public:
void InitMembers(int money)
{
myMoney = money;
numOfApples = 0;
}
void BuyApples(FruitSeller &seller, int money)
{
if (money < 0)
{
cout << "사과의 구매를 목적으로 0보다 작은 수를 전달할 수 없다" << 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, -1); //일부러 돈을 0보다 적게 지불
buyer.BuyApples(seller, 2000); //과일의 구매
cout << "과일 판매자의 현황" << endl;
seller.ShowSalesResult();;
cout << "과일 구매자의 현황" << endl;
buyer.ShowBuyResult();
return 0;
}
개발 환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 열혈 C++ 프로그래밍 윤성우 저
'C++ > 열혈 C++ 프로그래밍(윤성우 저)' 카테고리의 다른 글
열혈 C++ 프로그래밍 4-3 문제 (0) | 2017.05.30 |
---|---|
열혈 C++ 프로그래밍 4-2 문제 (0) | 2017.05.30 |
열혈 C++ 프로그래밍 3-2 문제 (0) | 2017.05.29 |
열혈 C++ 프로그래밍 3-1 문제 (0) | 2017.05.29 |
열혈 C++ 프로그래밍 2-4 문제 (0) | 2017.05.28 |