有时候我们做一些笔试或者是面试中可能会遇到定义一些类,然后叫你写出类的构造函数和析构函数调用顺序。这时候我们就需要对这个有了解才能够正确的做出来。先看看下面的一段代码。
1 #include <iostream>
2 using namespace std;
3
4 class A {
5 public:
6 A() {
7 cout << "A()" << endl;
8 }
9 ~A() {
10 cout << "~A()" << endl;
11 }
12 };
13
14 class B : public A {
15 public:
16 B() {
17 cout << "B()" << endl;
18 }
19 ~B() {
20 cout << "~B()" << endl;
21 }
22 };
23
24 class C : public B {
25 public:
26 C() {
27 cout << "C()" << endl;
28 }
29 ~C() {
30 cout << "~C()" << endl;
31 }
32 };
33
34 class D : public C {
35 public:
36 D() {
37 cout << "D()" << endl;
38 }
39 ~D() {
40 cout << "~D()" << endl;
41 }
42 };
43
44 int main()
45 {
46 A a;
47 B b;
48 C c;
49 D d;
50
51 return 0;
52 }
2 using namespace std;
3
4 class A {
5 public:
6 A() {
7 cout << "A()" << endl;
8 }
9 ~A() {
10 cout << "~A()" << endl;
11 }
12 };
13
14 class B : public A {
15 public:
16 B() {
17 cout << "B()" << endl;
18 }
19 ~B() {
20 cout << "~B()" << endl;
21 }
22 };
23
24 class C : public B {
25 public:
26 C() {
27 cout << "C()" << endl;
28 }
29 ~C() {
30 cout << "~C()" << endl;
31 }
32 };
33
34 class D : public C {
35 public:
36 D() {
37 cout << "D()" << endl;
38 }
39 ~D() {
40 cout << "~D()" << endl;
41 }
42 };
43
44 int main()
45 {
46 A a;
47 B b;
48 C c;
49 D d;
50
51 return 0;
52 }
来看看下面的运行结果我们就会明白其中的调用顺序是怎么一回事了。如果看不明白可以自己上机实践一下,只要我们掌握其中的原理,对于其它的变换就能够快速的写出构造和析构函数的调用顺序问题。记住析构函数的调用顺序与构造函数是相反的。
A()
A()
B()
A()
B()
C()
A()
B()
C()
D()
~D()
~C()
~B()
~A()
~C()
~B()
~A()
~B()
~A()
~A()