#include //STARTSOLUTION #include #include #include #include //ENDSOLUTION using namespace std; //STARTSOLUTION class Card { public: Card(string const& name): name{name} {} virtual ~Card() = default; virtual string get_description() const { stringstream ss; ss << "Name: " << name << ", Cost: " << get_cost(); return ss.str(); } virtual int get_cost() const = 0; private: string name; }; class FateCard: public Card { public: FateCard(string const& name, int ability_score, int successes): Card{name}, ability_score{ability_score}, successes{successes} {} int get_cost() const override { return ability_score * successes; } string get_description() const override { stringstream ss; ss << Card::get_description() << ", Ability Score: " << ability_score << ", Successes: " << successes; return ss.str(); } private: int ability_score; int successes; }; class ItemCard: public Card { public: ItemCard(string const& name, int lore): Card{name}, lore{lore} {} int get_cost() const override { return lore; } string get_description() const override { stringstream ss; ss << Card::get_description() << ", Lore: " << lore; return ss.str(); } private: int lore; }; int main() { vector cards{}; cards.push_back(new ItemCard{"Storm Maker", 120}); cards.push_back(new FateCard{"Strider", 5, 30}); cards.push_back(new ItemCard{"Wooden pipe", 20}); cards.push_back(new FateCard{"Durins song", 2, 50}); for( auto card: cards ) { cout << card -> get_description() << endl; } for( auto card: cards ) { delete card; } } //ENDSOLUTION int main() { vector cards{}; cards.push_back(ItemCard{"Storm Maker", 120}); cards.push_back(FateCard{"Strider", 5, 30}); cards.push_back(ItemCard{"Wooden pipe", 20}); cards.push_back(FateCard{"Durins song", 2, 50}); for( auto card: cards ) { cout << card.get_description() << endl; } }