| #include <string> | |
| /** Design a motor car from various components */ | |
| struct MotorCar { | |
| /** Information about an opinion of the design of a car component */ | |
| struct DesignOpinion { | |
| bool itrocks; | |
| std::string reason; | |
| static int AceDesignCount; | |
| static int TotalDesignCount; | |
| static int PercentScore(); | |
| }; | |
| /** Wheels component */ | |
| struct Wheels { | |
| enum Shape { Round, Square }; | |
| Wheels(Shape shape, size_t count); | |
| DesignOpinion Opinion(); | |
| private: | |
| Shape shape; | |
| size_t count; | |
| }; | |
| /** Windscreen component */ | |
| struct WindScreen { | |
| WindScreen(bool opaque); | |
| DesignOpinion Opinion(); | |
| private: | |
| bool opaque; | |
| }; | |
| /** Factory method for creating a car */ | |
| static MotorCar DesignFromComponents(const std::string &name, const Wheels &wheels, const WindScreen &windscreen); | |
| std::string Name() { | |
| return name; | |
| } | |
| /** Get an overall opinion on the car design */ | |
| std::string WillItWork(); | |
| private: | |
| MotorCar(const std::string &name, const Wheels &wheels, const WindScreen &windscreen); | |
| std::string name; | |
| Wheels wheels; | |
| WindScreen windscreen; | |
| }; |