6w5:第六週程式填空題2
阿新 • • 發佈:2019-01-07
描述
下面程式的輸出結果是:
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的解構函式。