Notice
Recent Posts
Recent Comments
«   2024/12   »
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
Archives
Today
Total
관리 메뉴

SYDev

C++ Chapter 04-2 : 캡슐화(Encapsulation) 문제풀이 본문

Programming Lang/C++

C++ Chapter 04-2 : 캡슐화(Encapsulation) 문제풀이

시데브 2023. 7. 15. 20:02

문제

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

 

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

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

 

문제풀이

 파일명 : FruitSeller.h

#ifndef __FRUITSELLER_H_
#define __FRUITSELLER_H_

class FruSel
{
    int APPLE_PRICE; 
    int numOfApples;
    int myMoney;

public:
	void InitMembers(int price, int num, int money);
    int SalesApples(int money);  
    void ShowSalesResult() const;
};

#endif

 

 파일명 : FruitSeller.cpp

#include <iostream>
#include "FruitSeller.h"
using namespace std;

void FruSel::InitMembers(int price, int num, int money)
{
    APPLE_PRICE = price;
    numOfApples = num;
    myMoney = money;
}

int FruSel::SalesApples(int money)
{
    int num = money / 1000;
    numOfApples -= num;
    myMoney += money;
    return num;
}

void FruSel::ShowSalesResult() const
{
    cout << "남은 사과 : " << numOfApples << endl;
    cout << "판매 수익 : " << myMoney << endl;
}

 

 파일명 : FruitBuyer.h

#ifndef __FRUITBUYER_H_
#define __FRUITBUYER_H_

#include "FruitSeller.h"

class FruBuy
{
    int myMoney; 
    int numOfApples;  

public:
    void InitMembers(int money);
    bool BuyApples(FruSel &seller, int money);
    void ShowBuyResult() const;
};

#endif

 

 파일명 : FruitBuyer.cpp

#include <iostream>
#include "FruitBuyer.h"

using namespace std;

void FruBuy::InitMembers(int money)
{
    myMoney = money;
    numOfApples = 0;
}

bool FruBuy::BuyApples(FruSel &seller, int money)
{
    if(money<0)
    {
        cout<<"벗어난 범위의 값 전달"<<endl;
        return false;
    }
    numOfApples += seller.SalesApples(money);
    myMoney -= money;

    return true;
}
void FruBuy::ShowBuyResult() const
{
    cout << "현재 잔액 : " << myMoney << endl;
    cout << "사과 개수 : " << numOfApples << endl;
}

 

 파일명 : main.cpp

#include <iostream>
#include "FruitSeller.h"
#include "FruitBuyer.h"
using namespace std;

int main(void)
{
    FruSel seller;
    seller.InitMembers(1000, 20, 0);
    FruBuy buyer;
    buyer.InitMembers(5000);
    buyer.BuyApples(seller, 2000);

    cout<<"과일 판매자의 현황"<<endl;
    seller.ShowSalesResult();
    cout<<"과일 구매자의 현황"<<endl;
    buyer.ShowBuyResult();

    return 0;
}

 


출처 : 윤성우, <윤성우의 열혈 C++ 프로그래밍>, 오렌지미디어, 2010.05.12