我理解的C++虚继承

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值