Hey, I'm starting up with classes in C++ so I made a little task to aid in learning them. Basically, I'm just wondering how it looks. Is the design good? Any flaws? I'm not worried about the actual car, I'm just trying to get an idea of how things should be done. Thanks!
Code:
// car.cpp
#include <iostream>
#include <stdlib.h>
#include <windows.h>
using namespace std;
enum { OFF, STARTED, ACCELE, DECEL };
class Car
{
public:
Car();
~Car() { /* nothing */ };
int GetSpeed();
void Start();
void Accelerate();
void Decelerate();
void Stop();
private:
int Speed;
int State;
int Time;
};
int main()
{
Car Corvette;
int n;
cout << "Ultra Car Simulator 3000!!\n\n";
cout << "Controls:\n";
cout << " 1. Start\n";
cout << " 2. Accelerate\n";
cout << " 3. Decelerate\n";
cout << " 4. Current Speed\n";
cout << " 5. Stop\n";
cout << " 6. Quit\n";
while (n != 6)
{
cin >> n;
switch (n)
{
case 1:
Corvette.Start();
break;
case 2:
Corvette.Accelerate();
break;
case 3:
Corvette.Decelerate();
break;
case 4:
cout << "Current speed: " << Corvette.GetSpeed() << ".\n";
break;
case 5:
Corvette.Stop();
break;
case 6:
break;
default:
cout << "The car doesn't understart that command.\n";
break;
}
}
cout << "\nVroom!\n";
system("PAUSE");
return 0;
}
Car::Car()
{
Speed = 0;
State = OFF;
}
int Car::GetSpeed()
{
int Time2 = GetTickCount();
if (State == ACCELE)
Speed += (Time2 - Time)/100;
else if (State == DECEL)
{
Speed -= (Time2 - Time)/100;
if (Speed < 0)
{
Speed = 0;
State = STARTED;
}
}
Time = GetTickCount();
return Speed;
}
void Car::Start()
{
if (State == OFF)
{
cout << "Car started.\n";
State = STARTED;
}
else
cout << "Car already started.\n";
}
void Car::Accelerate()
{
if (State == OFF)
cout << "Car needs to be started.\n";
else if (State == ACCELE)
cout << "Car already accelerating.\n";
else
{
cout << "Car accelerating.\n";
State = ACCELE;
Time = GetTickCount();
}
}
void Car::Decelerate()
{
if (State == OFF)
cout << "Car needs to be started.\n";
else if (State == DECEL)
cout << "Car already decelerating.\n";
else
{
cout << "Car decelerating.\n";
State = DECEL;
Time = GetTickCount();
}
}
void Car::Stop()
{
if (State == OFF)
cout << "Car already stopped\n";
else
{
cout << "Car stopped\n";
State = OFF;
Speed = 0;
}
}