47)多繼承和虛繼承
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 22public: 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)多繼承和虛繼承