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(); }
浙公网安备 33010602011771号