#include #include #include #include "Person.h" #include "PersonException.h" #include #include "memory" using std::cin; using std::cout; using std::string; using std::exception; int main() { { // start of extra scope std::vector> people; string namePrompt = "Enter name: "; string name; string agePrompt = "Enter age: "; int age; string salaryPrompt = "Enter salary: "; int salary; cout << namePrompt; cin >> name; while (name != "q") { try { cout << agePrompt; cin >> age; if (!cin) { cin.clear(); string dummy; cin >> dummy; throw PersonException("invalid age"); } // Person* personPtr = new Person(name, age); std::shared_ptr personPtr(Person::GetPerson(name, age)); cout << salaryPrompt; cin >> salary; if (!cin) { cin.clear(); string dummy; cin >> dummy; throw PersonException("invalid salary"); } personPtr->setSalary(salary); people.push_back(personPtr); } catch (exception &e) { cout << "PersonException thrown: " << e.what() << '\n'; } cout << "There are " << Person::GetCount() << " Person(s), " << people.size() << " in vector\n"; cout << namePrompt; cin >> name; } } // end of extra scope, destructor of vector called here cout << "There are " << Person::GetCount() << " Person(s) left dangling\n"; return 0; }