1.虚继承的构造函数和析构函数的调用顺序
在多重继承的时候, 构造顺序是 虚继承按顺序优先, 再次是其他按顺序, 由基类至派生类; 析构顺序正好相反;示意代码如下:
1 #include <iostream>
2 using namespace std;
3
4 class ZooAnimal {
5 public:
6 ZooAnimal ()
7 {
8 cout<< "ZooAnimal Constructor!" <<endl;
9 }
10 };
11
12 class Bear : public virtual ZooAnimal {
13 public:
14 Bear ()
15 {
16 cout<< "Bear Constructor!" <<endl;
17 }
18 };
19
20 class Character {
21 public:
22 Character ()
23 {
24 cout<< "Character Constructor!" <<endl;
25 }
26 };
27
28 class BookCharacter : public Character {
29 public:
30 BookCharacter ()
31 {
32 cout<< "BookCharacter Constructor!" <<endl;
33 }
34 };
35
36 class ToyAnimal {
37 public:
38 ToyAnimal ()
39 {
40 cout<< "ToyAnimal Constructor!" <<endl;
41 }
42 };
43
44 class TeddyBear : public BookCharacter, public Bear, public virtual ToyAnimal
45 {
46 public:
47 TeddyBear ()
48 {
49 std::cout << "TeddyBear Constructor!" << std::endl;
50 }
51 };
52
53 int main ()
54 {
55 TeddyBear* pTeddyBear = new TeddyBear();
56 delete pTeddyBear;
57 return 0;
58 }
输出结果:
spring@spring-plum:~/XiaoPing$ g++ -o virtualconstrator virtualconstrator.cc
spring@spring-plum:~/XiaoPing$ ./virtualconstrator
ZooAnimal Constructor!
ToyAnimal Constructor!
Character Constructor!
BookCharacter Constructor!
Bear Constructor!
TeddyBear Constructor!