C++基類和派生類的析構函數


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM