C++之统计动物数量

 

这是一道非常经典的练习题,涉及继承,静态变量,虚函数,友元的使用,统计动物数量

第一种方法:

#include <iostream>
using namespace std;
// 在此处补充你的代码
class Animal
{
protected:
	static int number;
public:
	Animal() {}
	virtual ~Animal() {}//虚函数
	friend void print();//一个类的友元函数可以访问该类的私有成员
}; int Animal::number = 0;//静态成员只能在类外初始化
 
class Dog : public Animal //继承
{
private:
	static int number;
public:
	Dog()//构造函数
	{
		Animal::number++;
		number++;
	}
	~Dog()//析构函数
	{
		Animal::number--;
		number--;
	}
	friend void print();
 
}; int Dog::number = 0;
 
class Cat: public Animal
{
private:
	static int number;
public:
	Cat()
	{
		Animal::number++;
		number++;
	}
	~Cat()
	{
		Animal::number--;
		number--;
	}
	friend void print();
}; 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();
}

 第二种方法:

#include <iostream>
using namespace std;
// 在此处补充你的代码
class Animal
{
	public :
		static int number;
		Animal()
		{ 
			number++;
		}
		virtual ~Animal()如果不加virtual,删除c2的时候就不能调用Cat的析构函数了
		{
			number--;
		}
};
class Dog:public Animal
{
	public:
		static int number;
		Dog()
		{
			number++;
		}
		~Dog()
		{
			number --;
		}
};
class Cat:public Animal
{
	public:
	static int number;
	Cat()
	{
		number++;
	 } 
	 ~Cat()
	 {
	 	number--;
	 }
};
int Animal::number=0,Dog::number=0,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();
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纷繁中淡定

你的鼓励是我装逼的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值