1. 程式人生 > >程式設計題#10:輸出指定結果二(C++程式設計第10周)

程式設計題#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; }