1. 程式人生 > >47)多繼承和虛繼承

47)多繼承和虛繼承

兩個 body name sleep pos out inf ima bsp

1)下面是一個多繼承的 代碼:

    

 1 #include<iostream>
 2 
 3 using namespace std;
 4 class bed
 5 {
 6 
 7 public:
 8     void sleep()
 9     {
10         cout<<"你可以睡覺"<<endl;
11     }
12 };
13 class sofa
14 {
15 
16 public:
17         void sit()
18     {
19         cout<<"你可以歇息"<<endl;
20 } 21 }; 22 23 //然後 我還有一個沙發床 24 //下面是多繼承,支持繼承兩個類,兩個類中的所有東西都繼承過來了 25 class sofa_bed:public bed,public sofa 26 { 27 public: 28 void sleep_and_sit() 29 { 30 sleep();//繼承於bed 31 sit();//繼承於sofa 32 } 33 }; 34 35 int main() 36 { 37 38 39 40 return 0; 41 }

2)然後 我又加了一個類 就是 funiture

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 class funiture
 6 {
 7 public:
 8     int cai_zhi;
 9 };
10 class bed:public funiture
11 {
12 
13 public:
14     void sleep()
15     {
16         cout<<"你可以睡覺"<<endl;
17     }
18 };
19 class sofa:public funiture
20 {
21 
22
public: 23 void sit() 24 { 25 cout<<"你可以歇息"<<endl; 26 } 27 }; 28 29 //然後 我還有一個沙發床 30 //下面是多繼承,支持繼承兩個類,兩個類中的所有東西都繼承過來了 31 class sofa_bed:public bed,public sofa 32 { 33 public: 34 void sleep_and_sit() 35 { 36 sleep();//繼承於bed 37 sit();//繼承於sofa 38 } 39 }; 40 41 int main() 42 { 43 44 45 46 return 0; 47 }

    你看 我的代碼 bed類和sofa類 都繼承了 funiture 那麽都會有 cai_zhi 這個變量,然後 我的sofa_bed 繼承了 bed和sofa 那麽就有了兩個 cai_zhi(一個來自bed,一個來自sofa)

  

     技術分享圖片 沙發床 有兩個 cai_zhi 變量

那麽,就來了 我要是 沙發床.cai_zhi 就出現變量不明確的問題 因為,你不知道是 bed繼承來的cai_zhi 還是 sofa 繼承來的 cai_zhi

技術分享圖片

    

但是 加了 virtual 就不會有這個問題了, 我的 sofa_bed 的 cai_zhi 最終來自於 爺爺的 funiture

技術分享圖片

技術分享圖片

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

技術分享圖片

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

技術分享圖片

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

技術分享圖片

    

47)多繼承和虛繼承