본문 바로가기

강의자료/C/C++

037. 클래스에 기능을 추가하자.

◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!


이전에 작성했던 커피 자판기 클래스에 밀크커피와 블랙커피라는 메뉴를 추가해보자.

실습 : 다음 규칙에 따라 코드를 수정하시오.
(1) CoffeeMachine클래스의 coffee멤버함수의 이름을 MilkCoffee로 수정하시오.
(2) CoffeeMachine클래스에 BlackCoffee멤버함수를 추가하고 한잔에 300원으로 단위로 계산하여 커피잔 수를 리턴하도록 작성하시오.
(3) CoffeeMachine클래스에 ShowMenu멤버함수를 추가하고 호출 시 아래와 같은 구문이 출력되도록 작성하시오.
     1. 밀크커피 : 200원
     2. 블랙커피 : 300원
(4) ShowMenu함수를 이용하여 화면에 메뉴가 출력되도록 하시오.
(5) 사용자로부터 메뉴번호와 금액을 입력받으시오.
(6) CoffeeMachine클래스를 이용하여 메뉴와 금액에 맞게 커피잔 수를 화면에 출력하시오.

예)
1. 밀크커피 : 200원
2. 블랙커피 : 300원
>>> 메뉴를 선택하세요 : 2
>>> 금액을 입력하세요 : 1000
블랙커피 3잔이 나왔습니다.

// #pragma once 에 대해서 설명한다.
// 생성자와 소멸자에 대해 이해한다.
// 초기화리스트에 대해 이해한다.
// 클래스는 비메모리, 객체는 메모리임을 알게된다.
// (즉, 데이터는 클래스가 아닌 객체에 저장한다.)


[CoffeeMachine.h] 파일
//-- CoffeeMachine.h -----------------------------------
#pragma once

class CoffeeMachine
{
public:
	int _milkCost;
	int _blackCost;
	int _menu;
	int _coin;

public:
	int MilkCoffee(int money);
	int BlackCoffee(int money);

	void ShowMenu();
	void SelectMenu();
	void InsertCoin();
	void TakeCoffee();

public:
	CoffeeMachine(int milkCost, int blackCost);
	~CoffeeMachine();
};
[CoffeeMachine.cpp] 파일
//-- CoffeeMachine.cpp ---------------------------------
//#include "CoffeeMachine.h" 
#include 
using namespace std;	// cout을 사용하기 위해 별도로 추가해야 한다.

CoffeeMachine::CoffeeMachine( int milkCost, int blackCost )
// : _milkCost(milkCost), _blackCost(blackCost)		// 초기화 리스트 설명.
{
	_milkCost = milkCost;		// 멤버변수와 파라미터 변수의 이름 중복 문제 설명.
	_blackCost = blackCost;
	_menu = _coin = 0;
}

CoffeeMachine::~CoffeeMachine()
{
	// do nothing...
}

int CoffeeMachine::MilkCoffee(int money)
{
	return money/_milkCost;
}
int CoffeeMachine::BlackCoffee( int money )
{
	return money/_blackCost;
}
void CoffeeMachine::ShowMenu()
{
	cout << "1. 밀크커피 : " << _milkCost << "원" << endl;
	cout << "2. 블랙커피 : " << _blackCost << "원" << endl;
}

void CoffeeMachine::SelectMenu()
{
	cout << ">>> 메뉴를 선택하세요 : ";
	cin >> _menu;
}

void CoffeeMachine::InsertCoin()
{
	cout << ">>> 금액을 입력하세요 : ";
	cin >> _coin;
}

void CoffeeMachine::TakeCoffee()
{
	if(_menu == 1)
	{
		cout << "밀크커피 " << MilkCoffee(_coin) << "잔이 나왔습니다." << endl;
	}
	else if(_menu == 2)
	{
		cout << "블랙커피 " << BlackCoffee(_coin) << "잔이 나왔습니다." << endl;
	}

	_menu = _coin = 0;
}

[main.cpp] 파일
//-- main.cpp-----------------------------------
#include  
//#include "coffee.h"
using namespace std;

void main( )
{
	CoffeeMachine machine(200, 300);
	//CoffeeMachine machine2(400, 500);		// 악덕업자.

	machine.ShowMenu();

	// 아래와 같이 클래스를 통해서 직접 멤버에 접근하는 우를 범해선 안된다.
	// 클래스 자체는 메모리를 소유하지 않기때문에 우리가 할 수 있는 건 아무것도 없다.
	// 우리가 수행하는 모든 작업은 메모리를 필요로 하기 때문이다.
	//CoffeeMachine.ShowMenu();	

	machine.SelectMenu();
	machine.InsertCoin();
	machine.TakeCoffee();
}