2017-04-27 7 views
0

Ich habe diesen Code,Warum Polymorphie bei Vererbung?

radio.read() radio.write druckt()

und ich bin mit Polymorphismus nicht. Meine Frage ist, dass, wenn das diese Art von Verhalten nur durch Verwendung der Vererbung tun kann, warum polymorphism überhaupt verwenden ???

#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 
 
}

Antwort

0

Sie trennen in nicht, dass Sie die Vererbung brauchen Polymorphismus zu verwenden.

Polymorphie tritt auf, wenn mehr als eine Klasse von derselben Basis erbt. Sie können damit Code schreiben, auf den Sie mit Hilfe der Basis (durch Referenz/Zeiger) auf Objekte verweisen, und diese Objekte können einen beliebigen abgeleiteten Typ haben. Wenn Sie beispielsweise Quadrat- und Kreisklassen aus der Klassenform ableiten, können Sie Code schreiben, der mit Formen und nicht mit jeder der abgeleiteten Klassen arbeitet. Sie können jedoch Code über die Basisschnittstelle aufrufen, die sich in jeder abgeleiteten Klasse anders verhält. Shape kann eine virtuelle GetArea-Funktion haben, Kreis und Quadrat implementieren dies jeweils anders. Einige Funktionen von GetTotalArea können über eine Sammlung von Formen iterieren und GetArea für jede Form aufrufen. In Zukunft könnten Sie eine neue Klasse namens Triangle hinzufügen und die GetTotalArea-Funktion könnte weiter ohne die Notwendigkeit zu bearbeiten funktionieren (wenn Sie es gut geschrieben hätten)

Manchmal brauchen Sie keine Polymorphie und in diesen Fällen ja - Sie könnten Vererbung aber nicht Polymorphie verwenden.