您的位置:首页 > 编程语言 > C语言/C++

编程题#10:输出指定结果二(C++程序设计第10周)

2016-02-16 22:01 686 查看
描述

通过填空使得程序输出的结果符合下面的要求。

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: