#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: //private가 선언되었으므로, 이어서 등장하는 변수와 함수는 private에 해당하는 범위 내에서(클래스 내에서만)접근가능.
char gamerID[CAR_CONST::ID_LEN];
int fuelGauge;
int curSpeed;
public: //public 선언되었으므로, 이어서 등장하는 변수와 함수는 어디서든 접근이 가능하다.
void InitMembers(const char * ID, int fuel);
void ShowCarState();
void Accel();
void Break();
};
void Car::InitMembers(const char * ID, int fuel) {
/* 클래스 안에 선언된 변수의 초기화를 목적으로 정의된 함수이다. 변수가 모두 private로 선언되어서 main함수에서 접근 불가능.
하지만 이 함수는 동일 클래스 내에 정의된 함수이므로 접근 가능. 뿐만 아니라, 이 함수는 public으로 선언되어서 main함수에서
호출 가능하다. main함수에서는 이 함수의 호출을 통해서 클래스 안에 선언된 변수를 초기화 할 수 있다.*/
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() {
Car run99;
run99.InitMembers("run99", 100);
/* 위의 문장은 초기화를 목적으로 InitMembers 함수를 호출하고 있다. 이 함수는 ID정보와 연료의 게이지 정보를 전달받아서
초기화되는 형태로 정의되어 있다 */
run99.Accel();
run99.Accel();
run99.Accel();
run99.ShowCarState();
run99.Break();
run99.ShowCarState();
/* 위의 문장들은 함수 호출이 모두 가능한 이유는 모두 public으로 선언되었기 때문이다.*/
return 0;
}
댓글남기기