STUDY/C++ & MFC

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

쑥말고인절미 2022. 4. 4. 15:04

Chapter 03에서 제시한 과일장수 시뮬레이션 예제 FruitSaleSim1.cpp에서 정의한 두 클래스의 멤버변수는 private으로 선언이 되어있다. 그러나 다음 조건을 유지할 수 있는 장치는 아무것도 되어있지 않다.

  • 사과의 구매를 목적으로 0보다 작은 수를 전달할 수 없다.

위의 제약사항을 항상 만족시킬 수 있도록 예제를 변경하고, 예제의 안전성을 높일 수 있도록 일부 함수를 const로 선언해보자.

#include <iostream>

//사과의 구매를 목적으로 0보다 작은 수를 전달할 수 없다. 일부 함수는 const로 구현하자.

using namespace std;

class FruitSeller{
    int APPLE_PRICE;
    int numOfApples;
    int myMoney;
        
    public : 
        void InitMembers(const int price, const int num, const int money){
            APPLE_PRICE = price;
            numOfApples = num;
            myMoney = money;
        }
        
        int SaleApples(const int money){
            int num = money / APPLE_PRICE;
            if(num<0){
                cout<<"0보다 작은 수를 입력하셨습니다."<<endl<<endl;
                return 0;
            }
            numOfApples -= num;
            myMoney += money;
            return num;
        }
        
        void ShowSalesResult() const{
            cout<<"남은 사과 : "<<numOfApples<<endl;
            cout<<"판매 수익 : "<<myMoney<<endl<<endl;
        }
};

class FruitBuyer{
    int myMoney;
    int numOfApples;
    
    public :
        void InitMembers(const int money){
            myMoney = money;
            numOfApples = 0;
        }
        
        void BuyApples(FruitSeller &seller, const int money){
            numOfApples += seller.SaleApples(money);
            
            if(money<0){
                myMoney += money;
                cout<<"0보다 작은 수를 입력하셨습니다."<<endl<<endl;
            }else{
            myMoney -= money;
            }
        }
        
        void ShowSalesResult() 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, -2000);
    
    cout<<"과일 판매자의 현황"<<endl;
    seller.ShowSalesResult();
    cout<<"과일 구매자의 현황"<<endl;
    buyer.ShowSalesResult();
    return 0;
}