我理解的C++虚继承

来源:互联网 发布:ftpflashfxp mac 编辑:程序博客网 时间:2024/05/20 05:11

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!


0 0
原创粉丝点击