描述
通过填空使得程序输出的结果符合下面的要求。
#include <iostream>
#include <map>
using namespace std;
// 在此处补充你的代码
int A::count = 0;
void func(B b) { }
int main()
{
A a1(5),a2;
cout << A::count << endl;
B b1(4);
cout << A::count << endl;
func(b1);
cout << A::count << endl;
A * pa = new B(4);
cout << A::count << endl;
delete pa;
cout << A::count << endl;
return 0;
}
输入
不需要输入。
输出
使得程序的输出结果是:
2
3
B::destructor
A::destructor
3
4
B::destructor
A::destructor
3
B::destructor
A::destructor
A::destructor
A::destructor
样例输入
不需要输入。
样例输出
2
3
B::destructor
A::destructor
3
4
B::destructor
A::destructor
3
B::destructor
A::destructor
A::destructor
A::destructor
提示
int A::count = 0; 这个变量是用来记录一共有多少个类A及类A的派生类的对象的。
源码
#include <iostream>
#include <map>
using namespace std;
//在此处补充你的代码
class A
{
public:
static int count;
A() {count++;}
A(int a) {count++;}
virtual ~A()
{
cout << "A::destructor" << endl;
}
/*
使用了delete释放某个重载了delete的类的对象空间时,先调用类的析构函数,
然后再调用重载的delete函数。
*/
void operator delete(void* a)//重载delete
{
count--;
}
};
class B: public A
{
public:
B():A() {}
B(int b):A() {}
B& operator = (B& b)
{
return b;
}
virtual ~B()
{
cout << "B::destructor" << endl;
}
};
int A::count = 0;
void func(B b) {}
int main()
{
A a1(5),a2;
cout << A::count << endl;
B b1(4);
cout << A::count << endl;
func(b1);//这一块也调用了析构函数和delete,原理尚不清楚
cout << A::count << endl;
A* pa = new B(4);
cout << A::count << endl;
delete pa;
cout << A::count << endl;
return 0;
}