Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. #include <string>
  4.  
  5. #include <vector>
  6.  
  7. class Animal {
  8.  
  9. public:
  10.     int id;
  11.     virtual unsigned int get_l()const {
  12.         return this->legs;
  13.     };
  14.     virtual std::string get_name()const {
  15.         return this->name;
  16.     };
  17.     void set_leg(const unsigned int legs) {
  18.         this->legs = legs;
  19.     }
  20.     void set_name(const std::string name) {
  21.         this->name = name;
  22.     }
  23.     static Animal* animal_factory(const unsigned int &id);
  24. protected:
  25.     unsigned int legs;
  26.     std::string name;
  27. };
  28. class Insect : public Animal {
  29.  
  30. public:
  31.     Insect() {
  32.         set_leg(6);
  33.     }
  34. };
  35.  
  36. class Spider :public Animal {
  37. public:
  38.     Spider() {
  39.         set_leg(8);
  40.     }
  41. };
  42. class Bird : public Animal {
  43. public:
  44.     Bird() {
  45.         set_leg(2);
  46.     }
  47. };
  48. class Cockroach : public Insect {
  49. public:
  50.     Cockroach() {
  51.         set_name("cockroach");
  52.     }
  53.     unsigned int get_l() {return this->legs;}
  54.      std::string get_name() {return this->name;}
  55. };
  56. class Tarantula : public Spider {
  57. public:
  58.     Tarantula() {
  59.         set_name("tarantula");
  60.     }
  61.      unsigned int get_l() {return this->legs;}
  62.      std::string get_name() {return this->name;}
  63. };
  64. class Sparrow : public Bird {
  65. public:
  66.     Sparrow() {
  67.         set_name("sparrow");
  68.     }
  69.     ~Sparrow() {};
  70.     unsigned int get_l() {return this->legs;}
  71.     std::string get_name() {return this->name;}
  72. };
  73. Animal *Animal::animal_factory(const unsigned int &id) {
  74.     switch (id) {
  75.     case 1:
  76.         return new Sparrow();
  77.         break;
  78.     case 2:
  79.         return new Tarantula();
  80.         break;
  81.     case 3:
  82.         return new Cockroach();
  83.         break;
  84.     default:
  85.         Animal();
  86.         break;
  87.     }
  88. };
  89. class leg_counter : public Animal {
  90. public:
  91.     static unsigned int no_legs;
  92.     leg_counter(Animal *anim) {
  93.         std::string n = anim->get_name();
  94.         std::cout << n << std::endl;
  95.         no_legs += anim->get_l();
  96.     }
  97. };
  98. unsigned int leg_counter::no_legs; // leg counter
  99. int main() {
  100.     for (int i = 1; i < 4; i++) {
  101.         int n = i;
  102.         leg_counter(Animal::animal_factory(i));
  103.     }
  104.     std::cout << leg_counter::no_legs << std::endl;
  105.    
  106.     return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement