Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- class Animal {
- public:
- int id;
- virtual unsigned int get_l()const {
- return this->legs;
- };
- virtual std::string get_name()const {
- return this->name;
- };
- void set_leg(const unsigned int legs) {
- this->legs = legs;
- }
- void set_name(const std::string name) {
- this->name = name;
- }
- static Animal* animal_factory(const unsigned int &id);
- protected:
- unsigned int legs;
- std::string name;
- };
- class Insect : public Animal {
- public:
- Insect() {
- set_leg(6);
- }
- };
- class Spider :public Animal {
- public:
- Spider() {
- set_leg(8);
- }
- };
- class Bird : public Animal {
- public:
- Bird() {
- set_leg(2);
- }
- };
- class Cockroach : public Insect {
- public:
- Cockroach() {
- set_name("cockroach");
- }
- unsigned int get_l() {return this->legs;}
- std::string get_name() {return this->name;}
- };
- class Tarantula : public Spider {
- public:
- Tarantula() {
- set_name("tarantula");
- }
- unsigned int get_l() {return this->legs;}
- std::string get_name() {return this->name;}
- };
- class Sparrow : public Bird {
- public:
- Sparrow() {
- set_name("sparrow");
- }
- ~Sparrow() {};
- unsigned int get_l() {return this->legs;}
- std::string get_name() {return this->name;}
- };
- Animal *Animal::animal_factory(const unsigned int &id) {
- switch (id) {
- case 1:
- return new Sparrow();
- break;
- case 2:
- return new Tarantula();
- break;
- case 3:
- return new Cockroach();
- break;
- default:
- Animal();
- break;
- }
- };
- class leg_counter : public Animal {
- public:
- static unsigned int no_legs;
- leg_counter(Animal *anim) {
- std::string n = anim->get_name();
- std::cout << n << std::endl;
- no_legs += anim->get_l();
- }
- };
- unsigned int leg_counter::no_legs; // leg counter
- int main() {
- for (int i = 1; i < 4; i++) {
- int n = i;
- leg_counter(Animal::animal_factory(i));
- }
- std::cout << leg_counter::no_legs << std::endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement