003:编程填空:统计动物数量

代码填空,使得程序能够自动统计当前各种动物的数量

 样例输入输出就不放了

这个题目出现在北大c++Mocc第三周,第三周的内容是类与对象的进阶,相关内容有构造函数、封闭类、友元等。最初以为这个题目可以通过友元去完成,但是在main()函数初始化时,出现了一个使用友元类给基类初始化的操作的,友元显然不能完成这一点,那么只好通过继承完成了。

#include <iostream>
using namespace std;
// 在此处补充你的代码
class Animal{
    public:
        static int number;
    Animal()
    {
        number++;
    }
    virtual ~Animal()
    //正常情况,子类祖先类的析构函数都是虚拟的,
    //这样删除祖先类指针、子类对象的时候,
    //可正确同时调用子类和祖先类的析构函数
    {
        number--;
    }
}; 
int Animal::number=0;//初始化 
class Dog:public Animal{
    public:
        static int number;//狗的数量 
        Dog()//构造函数 
        {
            number++;
        }
        ~Dog()//析构函数
        {
            Dog::number--;
        } 
};
int Dog::number=0;//初始化
class Cat:public Animal{
    public:
        static int number;//狗的数量 
        Cat()
        {
            number++;
        }
        ~Cat()
        {
            Cat::number--;
        }
};
int Cat::number=0;//初始化  

void print() {
    cout << Animal::number << " animals in the zoo, " << Dog::number << " of them are dogs, " << Cat::number << " of them are cats" << endl;
}
int main() {
    print();
    Dog d1, d2;
    Cat c1;
    print();
    Dog* d3 = new Dog();
    Animal* c2 = new Cat;
    Cat* c3 = new Cat;
    print();
    delete c3;
    delete c2;
    delete d3;
    print();
}

 

posted @ 2020-08-29 10:51  MEYE66  阅读(211)  评论(0)    收藏  举报