1.派生類也不能繼承基類的析構函數.
2.與構造函數不同的是,在派生類的析構函數中不用顯式地調用基類的析構函數,因為每個類只有一個析構函數,編譯器知道如何選擇,無需程序員干涉.
3.構造函數和虛構函數的執行順序:
- 創建派生類對象時,構造函數的執行順序和繼承順序相同,即先執行基類構造函數,再執行派生類構造函數。
- 而銷毀派生類對象時,析構函數的執行順序和繼承順序相反,即先執行派生類析構函數,再執行基類析構函數.
如下:
1 #include <iostream> 2 3 using namespace std; 4 5 class A { 6 public: 7 A(); 8 ~A(); 9 }; 10 A::A() { cout << "A construction" << endl; } 11 A::~A() { cout << "A destruction" << endl; } 12 13 class B : public A { 14 public: 15 B(); 16 ~B(); 17 }; 18 B::B() { cout << "B construction" << endl; } 19 B::~B() { cout << "B destruction" << endl; } 20 21 class C : public B { 22 public: 23 C(); 24 ~C(); 25 }; 26 C::C() { cout << "C construction" << endl; } 27 C::~C() { cout << "C destruction" << endl; } 28 29 int main() 30 { 31 std::cout << "Hello World!\n"; 32 C c; //先執行A的構造函數然后是B,最后為C. 析構函數則相反 33 return 0; 34 }
結果:
轉載來源:http://c.biancheng.net/view/2276.html