2017-04-27 22 views
0

我有這樣的代碼,打印爲什麼在繼承時使用多態?

radio.read()radio.write()

,我沒有使用多態。我的問題是,如果可以通過繼承來實現這種行爲,爲什麼要使用多態?

#include<iostream> 
 
using namespace std; 
 

 

 
class port{ 
 
\t public: 
 
\t \t 
 
\t \t write(){ 
 
\t \t \t cout<<"prt write()"; 
 
\t \t } 
 
\t \t read(){ 
 
\t \t \t cout<<"port read()"; 
 
\t \t \t \t 
 
\t \t } 
 
\t \t 
 
\t \t 
 
}; 
 

 
class a:public virtual port{ 
 
\t 
 
\t public: 
 
\t \t read(){ 
 
\t \t \t cout<<"a read()"; 
 
\t \t } 
 
\t 
 
}; 
 

 

 
class b:public virtual port{ 
 
\t 
 
\t public: 
 
\t \t write(){ 
 
\t \t \t cout<<"b write()"; 
 
\t \t } 
 
\t 
 
}; 
 

 

 
class radio:public a,public b{ 
 
\t 
 
\t public: 
 
\t \t write(){ 
 
\t \t \t cout<<"radio write()"; 
 
\t \t } 
 
\t \t read(){ 
 
\t \t \t cout<<"radio read()"; 
 
\t \t \t \t 
 
\t \t } 
 
}; 
 

 

 
int main(){ 
 
\t radio r=new b(); 
 
\t 
 
\t 
 
\t r.read(); 
 
\t r.write(); 
 
\t 
 
\t 
 
\t return 0; \t 
 
}

回答

0

它們不分開好需要繼承使用多態。

當多個類從同一個基地繼承時,就會出現多態性。您可以使用它來允許您在使用基礎(通過引用/指針)引用對象的位置編寫代碼,並且這些對象可以是任何派生類型。

例如,如果您從類形狀派生正方形和圓形類,則可以編寫代碼與形狀一起使用,而不是與任何派生類一起使用 - 但可以通過基本接口調用代碼,該派生類在每個派生類中的行爲不同。 Shape可能有一個GetArea虛函數,Circle和Square都以不同的方式實現。某些函數GetTotalArea可以遍歷一組形狀並在每個形狀上調用GetArea。將來你可以添加一個名爲Triangle的新類,並且GetTotalArea函數可以繼續工作而不需要編輯(如果你寫得很好的話)

有時候雖然你不需要多態,在那些情況下是 - 你可能會使用繼承而不是多態。