程式設計題#10:輸出指定結果二(C++程式設計第10周)
阿新 • • 發佈:2019-02-14
描述
通過填空使得程式輸出的結果符合下面的要求。
#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;
}