was ist der Unterschied zwischen Polymorphismus und Vererbung
Ich bin verwirrt über die Konzepte der Vererbung und Polymorphie. Ich meine, was ist der Unterschied zwischen code re-usability und Funktion überschreiben? Ist es unmöglich, eine Wiederverwendung in der übergeordneten Klasse-Funktion mit der Vererbung Konzept, sonst ist es unmöglich, die übergeordnete Klasse der Variablen bei Verwendung von Polymorphismus. Es scheint wenig Unterschied für mich.
class A
{
public:
int a;
virtual void get()
{
cout<<"welcome";
}
};
class B:public A
{
a =a+1; //why it is called code reuse
void get() //why it is called overriding
{
cout<<"hi";
}
};
Meine Frage ist über den Unterschied zwischen der Wiederverwendung von code und Funktion überschreiben.
Sie können Vererbung ohne Polymorphismus, aber Sie können nicht wirklich Polymorphismus ohne Vererbung.
Sie erwähnen, Polymorphismus, aber nicht anzeigen-code verwenden.
Diese Konzepte können, fühlen sich eine ganze Programm der Universität und spill-over-post-grad-Stufen, wenn man nicht aufpasst. Versuchen Sie, eine spezifischere Frage.
Sie erwähnen, Polymorphismus, aber nicht anzeigen-code verwenden.
Diese Konzepte können, fühlen sich eine ganze Programm der Universität und spill-over-post-grad-Stufen, wenn man nicht aufpasst. Versuchen Sie, eine spezifischere Frage.
InformationsquelleAutor shivcena | 2014-11-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fangen wir mit deinem Beispiel.
Vererbung: abgeleitete Klasse B von Klasse A, das bedeutet, dass Sie Zugriff auf alle öffentlichen Variablen und Methode.
Hier sind Sie, die mit Variablen
a
vonclass A
Sie sind das wiederverwenden die variablea
imclass B
wodurch eine code-Wiederverwendbarkeit.Polymorphismus beschäftigt, wie ein Programm ruft eine Methode je auf die Dinge, die es zu erfüllen hat: in deinem Beispiel hast du die überschreiben der Methode
get()
vonclass A
mit der Methodeget()
vonclass B
. Also, wenn Sie erstellen eine Instanz der Klasse B und rufen Sie die Methode get erhalten Sie'hi'
in der Konsole nicht'welcome'
InformationsquelleAutor Rahul Vishwakarma
Funktion Vererbung ermöglicht die Abstraktion von Verhalten von einer "konkreteren" abgeleitete Klasse(N) an ein "abstrakter" Basis-Klasse. (Dies ist Analog zu factoring in den Grundrechenarten und algebra.) In diesem Zusammenhang, mehr Abstrakt bedeutet einfach, dass weniger details angegeben werden. Es wird erwartet, dass die abgeleiteten Klassen werden erweitern (oder hinzufügen), was angegeben ist in der base-Klasse. Zum Beispiel:
Beachten Sie, dass im obigen Beispiel
getCommonProperty()
undsetCommonProperty(int)
geerbt von derCommonBase
Klasse, und kann verwendet werden, Instanzen von Objekten des TypsSubtype1
undSubtype2
. So haben wir die Vererbung hier aber wir haben nicht wirklich Polymorphismus noch (wie weiter unten erklärt wird).Können Sie oder können nicht wollen, um Objekte zu instanziieren der Basisklasse, aber Sie können es verwenden, um zu sammeln/geben Sie an, Verhalten (Methoden) und Eigenschaften (Felder), die alle abgeleiteten Klassen Erben. So mit Bezug auf die Wiederverwendung von code, wenn Sie mehr als einen Typ der abgeleiteten Klasse, teilt einige gemeinsame Verhalten, können Sie angeben, dass Verhalten nur einmal in der Basisklasse und dann "Wiederverwendung", die in allen abgeleiteten Klassen, ohne Sie zu kopieren. Zum Beispiel, in dem obigen code werden die Spezifikationen
getCommmonProperty()
undsetCommonProperty(int)
kann gesagt werden, dass Sie wiederverwendet werden, die von jedemSubtype#
Klasse, da die Methoden müssen nicht umgeschrieben werden, für jede.Polymorphismus ist verwandt, aber es bedeutet mehr. Im Grunde bedeutet es, dass Sie behandeln können Objekte, die zufällig aus verschiedenen Klassen der gleichen Weise, weil Sie alle geschehen abgeleitet werden (erweitern) eine gemeinsame Basisklasse. Für diese sehr nützlich, die Sprache, die Sie unterstützen sollten virtuellen Vererbung. Das bedeutet, dass die Funktion Signaturen können die gleichen sein, die über mehrere abgeleitete Klassen (D. H., die Signatur ist Teil der gemeinsamen, abstrakten Basisklasse), sondern wird tun, verschiedene Dinge, je nach spezifischen Art von Objekt.
So ändern das obige Beispiel hinzufügen
CommonBase
(aber haltenSubtype1
undSubtype2
die gleiche wie vorher):Beachten Sie, dass
doSomething()
erklärt wird hier als rein virtuelle Funktion inCommonBase
(was bedeutet, dass Sie nie instanziierenCommonBase
Objekt direkt -- es hat nicht so sein, ich wusste nur, dass die Dinge einfach zu halten). Aber jetzt, wenn Sie einen Zeiger auf eineCommonBase
Objekt, die entweder eineSubtype1
oder eineSubtype2
sind, können Sie anrufendoSomething()
. Dies tun Sie etwas verschiedenen je nach Typ des Objekts. Das ist Polymorphismus.In Bezug auf das code-Beispiel, das Sie in der Frage, der Grund
get()
heißt "überwiegendes" ist, weil das Verhalten in der angegebenenB::get()
version der Methode Vorrang vor ("überschreibt") das Verhalten in der angegebenenA::get()
version der Methode, wenn Sie anrufenget()
auf eine Instanz einerB
Objekt (auch wenn Sie es über eineA*
da die Methode deklariert wurdevirtual
in der KlasseA
).Schließlich Ihre andere Anmerkung/Frage über "code reuse" es nicht ganz so funktioniert, wie Sie ihn angegeben haben (da es nicht in einer Methode), aber ich hoffe, es wird klar sein, wenn Sie sich auf das, was ich oben schrieb. Wenn Sie erbt Verhalten von einer gemeinsamen Basis-Klasse, und Sie nur schreiben müssen Sie den code für das Verhalten einmal (in der Basisklasse) und anschließend alle abgeleiteten Klassen verwenden können, dann kann als eine Art von "code reuse".
InformationsquelleAutor Turix
Können Sie für parametrischen Polymorphismus ohne Vererbung. In C++ umgesetzt wird dies mithilfe von Vorlagen. Wiki-Artikel:
http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29#Parametric_polymorphism
InformationsquelleAutor rcgldr