设为首页 加入收藏

TOP

12.4 菱形继承(1)
2013-10-07 14:30:43 来源: 作者: 【 】 浏览:68
Tags:12.4 菱形 继承

12.4 菱形继承(1)

菱形继承是最复杂的对象结构,菱形结构会将单一继承与多重继承进行组合,如图12-12所示。

 
图12-12 菱形继承结构图

在图12-12中,类D属于多重继承中的子类,其父类为类B和类C,类B和类C拥有同一个父类A,如代码清单12-13所示。

代码清单12-13 菱形结构的类继承和派生—C++(www.cppentry.com)源码

  1. // 定义家具类,等同于类A  
  2. class CFurniture{  
  3. public:  
  4.     CFurniture(){  
  5.         m_nPrice = 0;  
  6.     }  
  7.     virtual ~CFurniture(){              // 家具类的虚析构函数  
  8.     printf("virtual ~CFurniture()\r\n");  
  9.     }  
  10.     virtual int GetPrice(){         // 获取家具价格  
  11.         return m_nPrice;  
  12.     };  
  13. protected:  
  14.     int m_nPrice;                   // 家具类的成员变量  
  15. };  
  16.  
  17. // 定义沙发类,继承自类CFurniture,等同于类B  
  18. class CSofa : virtual public CFurniture{  
  19. public:  
  20.     CSofa(){  
  21.         m_nPrice = 1;  
  22.         m_nColor = 2;  
  23.     }  
  24.     virtual ~CSofa(){               // 沙发类虚析构函数  
  25.         printf("virtual ~CSofa()\r\n");  
  26.     }  
  27.     virtual int GetColor(){         // 获取沙发颜色  
  28.         return m_nColor;  
  29.     }  
  30.     virtual int SitDown(){              // 沙发可以坐下休息  
  31.         return printf("Sit down and rest your legs\r\n");  
  32.     }  
  33. protected:  
  34.     int m_nColor;                   // 沙发类成员变量  
  35. };  
  36.  
  37. // 定义床类,继承自类CFurniture,等同于类C  
  38. class CBed : virtual public CFurniture{  
  39. public:  
  40.     CBed(){  
  41.         m_nPrice = 3;  
  42.         m_nLength = 4;  
  43.         m_nWidth = 5;  
  44.     }  
  45.     virtual ~CBed(){                // 床类的虚析构函数  
  46.         printf("virtual ~CBed()\r\n");  
  47.     }  
  48.     virtual int GetArea(){                  // 获取床面积  
  49.         return m_nLength * m_nWidth;  
  50.     }  
  51.     virtual int Sleep(){                    // 床可以用来睡觉  
  52.         return printf("go to sleep\r\n");  
  53.     }  
  54. protected:  
  55.     int m_nLength;                      // 床类成员变量  
  56.     int m_nWidth;  
  57. };  
  58.  
  59. // 子类沙发床的定义,派生自类CSofa和类CBed,等同于类D  
  60. class CSofaBed :  public CSofa,  public CBed{  
  61. public:  
  62.     CSofaBed(){  
  63.     m_nHeight = 6;  
  64.   }  
  65.     virtual ~CSofaBed(){                    // 沙发床类的虚析构函数  
  66.     printf("virtual ~CSofaBed()\r\n");  
  67.   }  
  68.     virtual int SitDown(){                  // 沙发可以坐下休息  
  69.         return printf("Sit down on the sofa bed\r\n");  
  70.     }  
  71.     virtual int Sleep(){                    // 床可以用来睡觉  
  72.         return printf("go to sleep on the sofa bed\r\n");  
  73.     }  
  74.   virtual int GetHeight(){  
  75.     return m_nHeight;  
  76.   }  
  77. protected:  
  78.   int m_nHeight;                        // 沙发类的成员变量  
  79. };  
  80. void main(int argc, char* argv[]){  
  81.     CSofaBed  SofaBed;  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇12.4 菱形继承(2) 下一篇12.2 多重继承(3)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: