#include <iostream> using namespace std;
// 在此处补充你的代码
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(); }
输入
无
输出
0 animals in the zoo, 0 of them are dogs, 0 of them are cats
3 animals in the zoo, 2 of them are dogs, 1 of them are cats
6 animals in the zoo, 3 of them are dogs, 3 of them are cats
3 animals in the zoo, 2 of them are dogs, 1 of them are cats
样例输入
None
样例输出
0 animals in the zoo, 0 of them are dogs, 0 of them are cats 3 animals in the zoo, 2 of them are dogs, 1 of them are cats 6 animals in the zoo, 3 of them are dogs, 3 of them are cats 3 animals in the zoo, 2 of them are dogs, 1 of them are cats
有一个多态的地方,所以基类Animal的析构函数要设为虚函数
#include <iostream>
#include<stdlib.h>
using namespace std;
class Animal
{
public:
static int number;
Animal() {}
virtual ~Animal() {}
};
class Dog :public Animal
{
public:
static int number;
Dog()
{
Animal::number++;
number++;
}
~Dog()
{
Animal::number--;
number--;
}
};
class Cat :public Animal
{
public:
static int number;
Cat()
{
Animal::number++;
number++;
}
~Cat()
{
Animal::number--;
number--;
}
};
void print() {
cout << Animal::number << " animals in the zoo, "
<< Dog::number << " of them are dogs, "
<< Cat::number << " of them are cats" << endl;
}
int Animal::number = 0;
int Dog::number = 0;
int Cat::number = 0;
int main() {
print();
Dog d1, d2;
Cat c1;
print(); // 2dog 1cat
Dog* d3 = new Dog();
Animal* c2 = new Cat;
Cat* c3 = new Cat; // 3cat 3dog
print();
delete c3;
delete c2; // 这里是一个多态
delete d3;
print(); // 2dog 1cat
system("pause");
}