美文网首页
Animal Shelter

Animal Shelter

作者: jianpengma | 来源:发表于2018-11-22 19:09 被阅读0次

设计动物救助站,可以收容狗和猫。

来收养动物的,只能选最先进来的狗,或者最先进来的猫,或者不区分动物,但也必须是最先进来的那只。

#include <iostream>

#include <queue>

#include <algorithm>

#include <string.h>

#include <assert.h>

/*

动物救助站,收容狗和猫

来选动物的,只能选最先进来的,在救助站时间最长的狗或者猫,或者最长时间的狗,或者最长时间的猫

*/

using namespace std;

class Animal

{

public:

    int index;

    void setIdx(int idx)

    {

        index = idx;

    }

    int getIdx()

    {

        return index;

    }

    virtual void say() = 0;

    virtual ~Animal(){}

};

class Dog: public Animal

{

public:

    void say()

    {

        cout<<"owl owl"<<endl;

    }

};

class Cat: public Animal

{

public:

    void say()

    {

        cout<<"miu miu"<<endl;

    }

};

class AnimaShelter

{

private:

    int order;

    queue<Dog *> dog_queue;

    queue<Cat *> cat_queue;

public:

    AnimaShelter()

    {

        this->order=0;

    }

    void enqueue(Animal* ani)

    {

        Dog* d = dynamic_cast<Dog *>(ani);

        if(d != NULL ) // a dog

        {

            d->setIdx(this->order);

            ++this->order;

            dog_queue.push(d);

        }

        else

        {

            Cat* c = dynamic_cast<Cat *>(ani);

            c->setIdx(this->order);

            ++this->order;

            cat_queue.push(c);

        }

    }

    // choose the oldest animal

    Animal* dequeAny()

    {

        Dog* d = dog_queue.front();

        Cat* c = cat_queue.front();

        if(d->getIdx() < c->getIdx())

        {

            dog_queue.pop();

            return d;

        }

        else

        {

            cat_queue.pop();

            return c;

        }

    }

    Dog* dequeDog()

    {

        Dog* d = dog_queue.front();

        dog_queue.pop();

        return d;

    }

    Cat* dequeCat()

    {

        Cat* c = cat_queue.front();

        cat_queue.pop();

        return c;

    }

};

int main()

{

    Animal* a1 = new Dog();

    Dog* d1 = dynamic_cast<Dog *>(a1);

    AnimaShelter farm;

    farm.enqueue(d1);

    Dog* d2 = farm.dequeDog();

    cout<<"Dog d2 index is "<<d2->getIdx()<<endl;

    d2->say();

    Cat* c1 = new Cat();

    farm.enqueue(c1);

    Cat* c2 = farm.dequeCat();

    cout<<"Cat c2 index is "<<c2->getIdx()<<endl;

    c2->say();

    farm.enqueue(c2);

    farm.enqueue(d2);

    Animal* a2 = farm.dequeAny();

    a2->say();

    return 1;

}

相关文章

  • Animal Shelter

    设计动物救助站,可以收容狗和猫。 来收养动物的,只能选最先进来的狗,或者最先进来的猫,或者不区分动物,但也必须是最...

  • LintCode 230 [Animal Shelter]

    原题 在一个宠物避难所里,仅有狗和猫两种动物可供领养,且领养时严格执行“先进先出”的规则。如果有人想要从避难所领养...

  • 猫咪和难民

    因为喜欢小动物,来美国后一直在animal shelter做义工,主要负责猫咪的socialize。简单说来就是让...

  • SHELTER

    每分钟脱贫20人?我他么穷了20年也没见有好转,大集上依旧是为了一毛几分钱起争执的平头百姓。 习近平走访中国最贫困...

  • java设计者模式之单例模式

    public class Animal { private static Animal animal = new...

  • 6,向上转型和向下转型

    向上转型:Animal animal = new Cat(); //向上转型animal.eat(); 将子类对象...

  • 单例类

    Animal.h Animal.m

  • This place is A shelter

    藤条长椅上 我们头顶着是夏季的星空 蝉鸣不断 谈笑不止 我还记得那时… 天空布满繁星你的眼睛是雪亮的 如今… 你与...

  • shelter 凛

    沉睡了大约四年后,凛逐渐恢复了意识,发现自己身处在一个透明的方行空间里,手边的一切使她感到陌生,却又有几分...

  • shelter 因

    据计算,一颗占地球十分之一质量的卫星将于数年后进入太阳引力范围之内,并最终被地球捕捉最后相撞。此消息一经公...

网友评论

      本文标题:Animal Shelter

      本文链接:https://www.haomeiwen.com/subject/qflrqqtx.html