직전 글에서 C++ 파일 분할하는 방법을 알아봤습니다. 이번엔 서로 연관 있는 2개의 클래스를 분할하는 방법을 알아보겠습니다. 이전 글의 응용이고 특정 조건만 추가해 주면 됩니다.
https://hgk5722.tistory.com/27
이번에도 visual studio 2022 버전을 사용합니다.
분할 하기전 원형 코드
#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;
int numOfApples;
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 << endl;
}
};
int main() {
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;
}
class FruitBuyer에서 void BuyApples 함수가 매개변수로 FruitSeller 객체를 사용하고 있는 것이 보입니다. 이처럼 하나의 객체가 다른 하나의 객체에게 메시지를 전달하는 방법은 함수 호출로 구현할 수 있습니다.
이것을 message passing이라 부릅니다.
원형 코드의 실행 결과는 다음과 같습니다.
과일 판매자의 현황
남은 사과18
판매 수익2000
과일 구매자의 현황
현재 잔액:3000
사과 개수:2
1단계: 파일 나누기
헤더 파일의 이름은 FruitSeller.h, FruitBuyer.h 소스 파일의 이름은 FruitSeller.cpp, FruitBuyer.cpp 로 main() 파일 이름은 FruitSalesSim1으로 하겠습니다.
1. 헤더 파일 만들기
헤더 파일 FruitSeller.h를 만들면 다음과 같습니다.
#pragma once
#include <iostream>
class FruitSeller {
private:
int APPLE_PRICE;
int numOfApples;
int myMoney;
public:
void InitMembers(int price, int num, int money);
int SaleApples(int money);
void ShowSalesResult();
};
헤더 파일이기에 #pragma를 넣어줍니다.
visual studio 속 결과는 다음과 같습니다.
두번째 헤더 파일 FruitBuyer.h를 만들면 다음과 같습니다.
#pragma once
#include "FruitSeller.h"
class FruitBuyer {
int myMoney;
int numOfApples;
public:
void InitMembers(int money);
void BuyApples(FruitSeller& seller, int money);
void ShowBuyResult();
};
*void BuyApples 함수의 인자에 FruitSeller 객체를 받는 모습이 보입니다. 그래서 #include "FruitSeller.h"로 헤더 파일을 받아줍니다.
visual studio 속 모습은 아래와 같습니다.
2. 소스 파일 만들기
이젠 멤버 함수를 채우기 위해 소스 파일을 만들어 보겠습니다.
FruitSeller.cpp을 만들면 다음과 같습니다.
#include <iostream>
#include "FruitSeller.h"
using namespace std;
void FruitSeller::InitMembers(int price, int num, int money) {
APPLE_PRICE = price;
numOfApples = num;
myMoney = money;
}
int FruitSeller::SaleApples(int money) {
int num = money / APPLE_PRICE;
numOfApples -= num;
myMoney += money;
return num;
}
void FruitSeller::ShowSalesResult() {
cout << "남은 사과 : " << numOfApples << endl;
cout << "판매 수익 : " << myMoney << endl << endl;
}
cout 등이 있으므로 using namespace std; 와 #include <iostream>이 보이고 또 소스 파일이기에 헤더 파일 include를 한 것도 알 수 있습니다.
visual studio 속 모습은 아래와 같습니다.
두번째로 FruitBuyer.cpp 소스 파일을 만들면 아래 코드가 됩니다.
#include "FruitBuyer.h"
#include "FruitSeller.h"
#include <iostream>
using namespace std;
void FruitBuyer::InitMembers(int money) {
myMoney = money;
numOfApples = 0;
}
void FruitBuyer::BuyApples(FruitSeller& seller, int money) {
numOfApples += seller.SaleApples(money);
myMoney -= money;
}
void FruitBuyer::ShowBuyResult() {
cout << "현재 잔액 : " << myMoney << endl;
cout << "사과 개수 : " << numOfApples << endl << endl;
}
소스 파일이니까 #include "FruitBuyer.h"가 보이고 #include "FruitSeller" 도 추가한 게 보입니다.
visual studio 속 모습은 다음과 같습니다.
3. main()파일 만들기
메인 파일 FruitSalesSim1.cpp는 아래와 같습니다.
#include "FruitSeller.h"
#include "FruitBuyer.h"
using namespace std;
int main() {
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;
}
헤더 파일 2개를 include했고 출력을 위해 using namespace std;를 추가했습니다.
visual studio 속 모습은 아래와 같습니다.
2단계: 실행하기
Ctrl + F5를 눌러 실행하면
위와 같은 결과가 나온다!
이렇게 2개의 클래스 끼리 message passing 하는 코드를 파일 분할해보았습니다.
코드 출처:
http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788996094043
'[Computer Science] > [C & C++]' 카테고리의 다른 글
[C/C++] const의 위치에 따른 의미 정리 (0) | 2022.04.20 |
---|---|
C++ 파일 분할(visual studio) (0) | 2022.03.24 |