728x90
반응형
#include <iostream>
using namespace std;
// 구조체 Car와 관련된 각종 정보를 상수화함
// 각각의 상수가 의미하는 바는 관련 함수를 통해 이해할 수 있음
#define ID_LEN 20
#define MAX_SPD 200
#define FUEL_STEP 2
#define ACC_STEP 10
#define BRK_STEP 10
struct Car {
char gamerID[ID_LEN];
int fuelGauge;
int curSpeed;
};
void ShowCarState(const Car& car);
void Accel(Car& car);
void Break(Car& car);
int main(void) {
Car run99 = { "run99", 100, 0 };
Accel(run99);
Accel(run99);
ShowCarState(run99);
Break(run99);
ShowCarState(run99);
Car sped77 = { "sped77", 100, 0 };
Accel(sped77);
Break(sped77);
ShowCarState(sped77);
return 0;
}
// 차의 정보를 출력하는 기능의 함수
// 단순히 정보를 출력만하기 때문에 const 참조자를 매개변수로 선언
void ShowCarState(const Car& car) {
cout << "소유자 ID: " << car.gamerID << endl;
cout << "연료량: " << car.fuelGauge <<"%" << endl;
cout << "현재속도: " << car.curSpeed <<"km/s" << endl;
}
// 차의 가속을 위해서 엑셀을 밟은 상황을 표현해 놓은 함수
// 엑셀을 밟을 때마다 연료가 줄어들고 스피드가 올라가는 상황을 단순히 표현
void Accel(Car& car) {
if (car.fuelGauge <= 0)
return;
else
car.fuelGauge -= FUEL_STEP;
if (car.curSpeed + ACC_STEP >= MAX_SPD) {
car.curSpeed = MAX_SPD;
return;
}
car.curSpeed += ACC_STEP;
}
// 브레이크를 밟은 상황을 표현한 함수
// 브레이크도 연료의 소모가 동반되지만, 단순히 속도가 감속하는 것으로 표현
void Break(Car& car) {
if (car.curSpeed < BRK_STEP) {
car.curSpeed = 0;
return;
}
car.curSpeed -= BRK_STEP;
}
/*소유자 ID: run99
연료량: 96%
현재속도: 20km/s
소유자 ID: run99
연료량: 96%
현재속도: 10km/s
소유자 ID: sped77
연료량: 98%
현재속도: 0km/s*/
// RacingCar.cpp
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;
namespace CAR_CONST {
enum {
ID_LEN = 20, MAX_SPD = 200, FUEL_STEP=2,
ACC_STEP = 10, BRK_STEP = 10
};
}
class Car {
private:
char gamerID[CAR_CONST::ID_LEN];
int fuelGauge;
int curSpeed;
public:
void InitMembers(char* ID, int fuel);
void ShowCarState();
void Accel();
void Break();
};
void Car::InitMembers(char* ID, int fuel) {
strcpy(gamerID, ID);
fuelGauge = fuel;
curSpeed = 0;
}
void Car::ShowCarState() {
cout << "소유자 ID: " << gamerID << endl;
cout << "연료량: " << fuelGauge << "%" << endl;
cout << "현재속도: " << curSpeed << "Km/s" << endl << endl;
}
void Car::Accel() {
if (fuelGauge <= 0)
return;
else
fuelGauge -= CAR_CONST::FUEL_STEP;
if ((curSpeed + CAR_CONST::ACC_STEP) >= CAR_CONST::MAX_SPD) {
curSpeed = CAR_CONST::MAX_SPD;
return;
}
curSpeed += CAR_CONST::ACC_STEP;
}
void Car::Break() {
if (curSpeed < CAR_CONST::BRK_STEP) {
curSpeed = 0;
return;
}
curSpeed -= CAR_CONST::BRK_STEP;
}
int main(void) {
Car run99;
run99.InitMembers("---", 100);
run99.Accel();
run99.Accel();
run99.Accel();
run99.ShowCarState();
run99.Break();
run99.ShowCarState();
return 0;
}
//RacingCarClassBase.cpp
#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; // private
int numOfApples; //private
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(void) {
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;
}
/*
과일 판매자의 현황
남은 사과: 18
판매 수익: 2000
과일 구매자의 현황
현재 잔액 : 3000
사과 개수: 2*/
// FruitSalesim1.cpp
728x90
반응형
'Language > C & C++' 카테고리의 다른 글
Implement reference-based call-by-reference (0) | 2022.09.28 |
---|---|
l-value and r-value (0) | 2022.09.27 |
BankingSystemver01.cpp (0) | 2022.09.26 |
C++ (0) | 2022.09.24 |
Pointer Examples (0) | 2022.09.10 |