///////////////////////////////////////////////////////////////////////////////// // Soldiers.cpp - demonstrates inheritance // // // // Jim Fawcett, Summer Short Course, Su2016 // ///////////////////////////////////////////////////////////////////////////////// /* * Found in: Handouts\ShortCourse\Repository\GettingStartedExamples * */ #include "Soldiers.h" Gear::Gear(const Name& name) : name_(name) {} Gear::~Gear() {} Gear::Name Gear::name() { return name_; } Person::Person(const Name& name) : name_(name) {} void Person::eat() { std::cout << "\n " << name() << " eating"; } void Person::sleep() { std::cout << "\n " << name() << " sleeping"; } Person::Name Person::name() { return name_; } Person::~Person() {} Soldier::Soldier(const Name& name) : Person(name) {} void Soldier::add(const Gear& gear) { equip_.push_back(gear); } Soldier::Equipment& Soldier::equipment() { return equip_; } Officer::Officer(const Name& name) : Soldier(name) {} void Officer::salute() { std::cout << "\n casual salute"; } Sergeant::Sergeant(const Name& name) : Soldier(name) {} void Sergeant::salute() { std::cout << "\n default salute"; } Private::Private(const Name& name) : Soldier(name) {} void Private::salute() { std::cout << "\n snappy salute"; } void show(Soldier& s) { s.salute(); std::cout << "\n Sir, my name is " << s.name(); for (auto eq : s.equipment()) std::cout << "\n inspecting " << eq.name(); if (s.equipment().size() == 0) std::cout << "\n Sorry sir, I forgot my equipment"; } int main() { Officer off("Frank"); off.add(Gear("45 Caliber Pistol")); Sergeant sgt("Sam"); sgt.add(Gear("m16 carbine")); Private pvt1("George"); pvt1.add(Gear("m16 carbine")); pvt1.add(Gear("40lb backpack")); Private pvt2("Charlie"); pvt2.add(Gear("m16 carbine")); pvt2.add(Gear("mortar")); Private pvt3("Slacker"); Utilities::title("chow time"); off.eat(); sgt.eat(); pvt1.eat(); pvt2.eat(); pvt3.eat(); Utilities::putLine(); Utilities::title("inspection"); show(sgt); show(pvt1); show(pvt2); show(pvt3); std::cout << "\n\n"; }