//================================================================
// Enums
enum class FuelType
{
GASOLINE
};
enum class EngineType
{
V8
};
//================================================================
// Functions
const char* etos(const FuelType type)
{
if (type == FuelType::GASOLINE)
{
return "FuelType";
}
}
const char* etos(const EngineType type)
{
if (type == EngineType::V8)
{
return "V8";
}
}
//================================================================
// Classes
class Engine
{
public:
Engine(uint32_t horsePower, FuelType fuelType, EngineType engineType)
: mHorsePower(horsePower), mFuelType(fuelType), mEngineType(engineType)
{
}
void Print()
{
cout << "Engine: " << mHorsePower << "HP | Fuel: " << etos(mFuelType) << " | Type: " << etos(mEngineType) << endl;
}
private:
uint32_t mHorsePower;
FuelType mFuelType;
EngineType mEngineType;
};
class Car
{
public:
Car(const string& brand, const string& modelName, uint32_t modelYear, const Engine& engine)
: mBrand(brand), mModelName(modelName), mModelYear(modelYear)
{
mEngine = new Engine(engine);
}
~Car()
{
if (mEngine == nullptr)
{
delete mEngine;
}
}
void PrintCarInfo()
{
cout << "Car: " << mBrand << " " << mModelName << " (" << mModelYear << ")" << endl;
}
void PrintEngine()
{
mEngine->Print();
}
private:
string mBrand;
string mModelName;
uint32_t mModelYear;
Engine* mEngine;
};
//================================================================
// Main
int main()
{
Engine myEngine{ 450,FuelType::GASOLINE, EngineType::V8 };
Car myCar("Ford", "Mustang", 2022, myEngine);
myCar.PrintCarInfo();
myCar.PrintEngine();
return 0;
}