| #include "example.h" | |
| int MotorCar::DesignOpinion::AceDesignCount = 0; | |
| int MotorCar::DesignOpinion::TotalDesignCount = 0; | |
| int MotorCar::DesignOpinion::PercentScore() { | |
| return AceDesignCount*100/TotalDesignCount; | |
| } | |
| MotorCar::Wheels::Wheels(Shape shape, size_t count) : shape(shape), count(count) {} | |
| MotorCar::WindScreen::WindScreen(bool opaque) : opaque(opaque) {} | |
| MotorCar::MotorCar(const std::string &name, const Wheels &wheels, const WindScreen &windscreen) : name(name), wheels(wheels), windscreen(windscreen) {} | |
| MotorCar MotorCar::DesignFromComponents(const std::string &name, const Wheels &wheels, const WindScreen &windscreen) { | |
| MotorCar car = MotorCar(name, wheels, windscreen); | |
| DesignOpinion::TotalDesignCount++; | |
| if (car.wheels.Opinion().itrocks && car.windscreen.Opinion().itrocks) | |
| DesignOpinion::AceDesignCount++; | |
| return car; | |
| } | |
| MotorCar::DesignOpinion MotorCar::Wheels::Opinion() { | |
| DesignOpinion opinion; | |
| opinion.itrocks = true; | |
| if (shape == Square) { | |
| opinion.itrocks = false; | |
| opinion.reason = "you'll have a few issues with wheel rotation"; | |
| } | |
| if (count <= 2) { | |
| opinion.reason += opinion.itrocks ? "" : " and "; | |
| opinion.itrocks = false; | |
| opinion.reason += "a few more wheels are needed for stability"; | |
| } | |
| if (opinion.itrocks) | |
| opinion.reason = "your choice of wheels was top notch"; | |
| return opinion; | |
| } | |
| MotorCar::DesignOpinion MotorCar::WindScreen::Opinion() { | |
| DesignOpinion opinion; | |
| opinion.itrocks = !opaque; | |
| opinion.reason = opinion.itrocks ? "the driver will have a commanding view out the window" : "you can't see out the windscreen"; | |
| return opinion; | |
| } | |
| std::string MotorCar::WillItWork() { | |
| DesignOpinion wh = wheels.Opinion(); | |
| DesignOpinion ws = windscreen.Opinion(); | |
| std::string willit; | |
| if (wh.itrocks && ws.itrocks) { | |
| willit = "Great car design because " + wh.reason + " and " + ws.reason; | |
| } else { | |
| willit = "You need a rethink because "; | |
| willit += wh.itrocks ? "" : wh.reason; | |
| willit += (!wh.itrocks && !ws.itrocks) ? " and " : ""; | |
| willit += ws.itrocks ? "" : ws.reason; | |
| } | |
| return willit; | |
| } |