#include <iostream>
#include <stdio.h>
#include <vector>
#include <memory>
using namespace std;

class Animal
{
public:
    virtual ~Animal(){}
    virtual void walking()=0;
};
class Dog: public Animal
{
public:
    virtual void walking()
    {
        printf("dogs walk on four legs\n");
    }
};
class Pig:public Animal
{
public:
    virtual void walking()
    {
        printf("Pigs walk on four legs\n");
    }
};
class Chicken:public Animal
{
public:
    virtual void walking()
    {
        printf("chickens walk on two legs\n");
    }
};
int main()
{
   
    printf("class relization relationship\n");
	vector<shared_ptr<Animal>> animals;
    animals.push_back(shared_ptr<Animal>(new Dog()));
    animals.push_back(shared_ptr<Animal>(new Chicken()));
    animals.push_back(shared_ptr<Animal>(new Pig()));
   
    for (auto& i : animals)
		i->walking();
    
   return 0;
}