Study/Object-Oriented

문제 04 - 1 [정보 은닉과 const]

__PS 2022. 6. 22. 23:08
728x90

기존 문제는 사과의 구매 목적으로 0보다 작은 수를 전달할 수 없고, 함수를 const로 선언하여 코드의 안정성을 높이는 것이었다.

기존대로 구현 후 문득 떠오른 생각은

만약 구매자의 돈이 엄청나게 많다면?

그래도 사과의 개수는 정해져 있으므로 판매자는 구매자의 돈 전부를 수익으로 낼 수 없다.

즉, 아무리 돈이 많아도 판매자가 얻을 수 있는 수익과 구매자가 지불할 금액은 정해져 있다.

이것까지 한 번 구현해보았다.

근데 이상하게 구현했을수도..?

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
using namespace std;
class FruitSeller{
private:
    int APPLE_PRICE, numOfApples, 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;
        if(num>20){
            num=20;
            money = APPLE_PRICE * num;
        }
        numOfApples -= num;
        myMoney += money;
        return num;
    }
    bool check(){
        if(numOfApples == 0){
            return true;
        }
        else{
            return false;
        }
    }
    void ShowSalesResult() const{
        cout << "남은 사과 : " << numOfApples << "\n";
        cout << "판매 수익 : " << myMoney << "\n\n";
    }
};
class FruitBuyer{
private:
    int myMoney, numOfApples;
public:
    void InitMembers(int money){
        numOfApples = 0;
        myMoney = money;
    }
    bool BuyApples(FruitSeller &seller, int money){
        if(money<=0){
            cout << "돈이 0 보다 적습니다.\n";
            return false;
        }
        numOfApples += seller.SaleApples(money);
        if(seller.check()){
            myMoney=0;
        }
        else{
            myMoney -= money;
        }
        return true;
    }
    void ShowBuyResult() const{
        cout << "사과 개수 : " << numOfApples << "\n";
        cout << "현재 잔액 : " << myMoney << "\n\n";
    }
};
int main(){
    FruitSeller seller;
    seller.InitMembers(1000200);
    FruitBuyer buyer;
    buyer.InitMembers(5000);
    buyer.BuyApples(seller, 0);
    // buyer.BuyApples(seller, 2000);
    // buyer.BuyApples(seller, 40000);
    
    cout << "과일 판매자의 현황" << "\n";
    seller.ShowSalesResult();
    cout << "과일 구매자의 현황" << "\n";
    buyer.ShowBuyResult();
 
}
cs