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

描述

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

#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;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值