#include using namespace std; class Squirrel { float groundSpeed, treeSpeed; string name; public: Squirrel(string n, float g, float t) : name(n), groundSpeed(g), treeSpeed(t) {} float travelTime(float groundDist, float treeDist) const { return groundDist / groundSpeed + treeDist / treeSpeed; } string getName() const{ return name; } }; class RaceCourse { float groundDist, treeDist; string name; public: RaceCourse(string n, float g, float t) : groundDist(g), treeDist(t), name(n) {} string raceSquirrels(const Squirrel &a, const Squirrel &b); string getName() const{ return name; } }; int main(){ Squirrel speedy("Speedy", 12, 5); Squirrel climby("Climby", 3, 10); Squirrel skrat("Skrat", 10, 8); RaceCourse treetrack("Tree Track", 1, 10); RaceCourse field("Field", 10, 1); RaceCourse mix("Mix", 10, 10); Squirrel squirrels[] = {speedy, climby, skrat}; RaceCourse tracks[] = {treetrack, field, mix}; int sqlen = sizeof(squirrels) / sizeof(Squirrel); for(auto rc : tracks){ for(int i = 0; i < sqlen; i++){ int opp = (i+1) % sqlen; cout << squirrels[i].getName() << " vs " << squirrels[opp].getName() << " on track " << rc.getName() << ": "; cout << rc.raceSquirrels(squirrels[i], squirrels[opp]) << " wins!\n"; } } return 0; } string RaceCourse::raceSquirrels(const Squirrel &a, const Squirrel &b){ float time_a = a.travelTime(groundDist, treeDist); float time_b = b.travelTime(groundDist, treeDist); return (time_a > time_b)? b.getName() : a.getName(); }