struct Employee { ... };
struct Manager : virtual Employee { ... };
struct Worker : virtual Employee { ... };
struct MiddleManager : Manager, Worker { ... };书上说
虚继承就是MiddleManager类的实例中只有一个Employee类的实例这好象有点矛盾呀!!!假设Employee类有一个成员变量X
MiddleManager类的实例中肯定有Manager实例和Worker实例
由于只有一个Employee类的实例
那么Manager实例和Worker实例的成员变量X是同一个值
这好象不合逻辑呀

解决方案 »

  1.   

    不是这样子的哦.
    虚继承不影响单独存在的Manager实例和Worker实例中的Employee.即使在MiddleManager中,Manager和Worker中用户显式定义的Employee类的变量X也是独立存在的.但是,子类本身已经包含了父类的实现!!这个实现在虚继承链的终端是唯一的.
       A 
      /  B   C
      \ /
       D
    B,C,D类变量都可以使用A类所定义的符合访问条件的变量或接口.但在D类中,设A类有个公共成员int m_Ai;那么D类的对象d中,((B)d).m_Ai和((C)d).m_Ai,以及d.m_Ai, ((A)d).m_Ai都将是同一个值.