1. 程式人生 > >6w5:第六週程式填空題2

6w5:第六週程式填空題2

描述

下面程式的輸出結果是:

destructor B

destructor A

請完整寫出 class A。 限制條件:不得為 class A 編寫建構函式。

#include <iostream>
using namespace std;
class A {
// 在此處補充你的程式碼
};
class B:public A {
    public:
        ~B() { cout << "destructor B" << endl; }
};
int main() {
    A * pa;
    pa = new B;
    delete pa;
    return 0;
}

輸入無輸出destructor B
destructor A樣例輸入

樣例輸出

destructor B
destructor A

 

Code:

#include <iostream>
using namespace std;
class A {
// 在此處補充你的程式碼
    public:
        virtual ~A() { cout << "destructor A" << endl; }
};
class B:public A {
    public:
        ~B() { cout << "destructor B" << endl; }
};
int main() {
    A * pa;
    pa = new B;
    delete pa;
    return 0;
}

  

Analysis:

剛開始想的是加一A的解構函式,但是執行的時候只能夠執行A的解構函式,不能執行B的解構函式。但是當把A的解構函式變成虛的解構函式時,就能夠正確輸出了。根據多型的機制來分析:

pa是指向基類A物件的指標,當pa指向基類A的派生類B時,此時就滿足了多型的條件。析構時先執行B的解構函式在執行A的解構函式。