fork download
  1. #include <iostream>
  2. #include <memory>
  3.  
  4. class Animal {
  5. public:
  6. virtual ~Animal() = default;
  7. virtual const char *says() const = 0;
  8.  
  9. static std::unique_ptr<Animal> makeLion()
  10. {
  11. class Lion : public Animal
  12. {
  13. public:
  14. virtual const char *says() const override
  15. {
  16. return "roar";
  17. }
  18. };
  19. return std::make_unique<Lion>();
  20. }
  21. static std::unique_ptr<Animal> makeTiger() {
  22. class Tiger : public Animal
  23. {
  24. public:
  25. virtual const char *says() const override
  26. {
  27. return "meow";
  28. }
  29. };
  30. return std::make_unique<Tiger>();
  31. }
  32. static std::unique_ptr<Animal> makePig() {
  33. class Pig : public Animal
  34. {
  35. public:
  36. virtual const char *says() const override
  37. {
  38. return "That\'s all Folks!";
  39. }
  40. };
  41. return std::make_unique<Pig>();
  42. }
  43. };
  44.  
  45. int main() {
  46. std::cout << Animal::makeLion()->says() << std::endl;
  47. }
  48.  
Success #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
roar