Heim >Backend-Entwicklung >C++ >Arten von Polymorphismus – vorübergehend, enthalten, parametrisiert und erzwungen
Hier werden wir verschiedene Arten von Polymorphismus sehen. Arten von -
Ad-Hoc-Polymorphismus wird als Überladung bezeichnet. Dadurch können Funktionen mit demselben Namen für verschiedene Typen unterschiedlich agieren. Sowohl Funktionen als auch Operatoren können überlastet sein. Einige Sprachen unterstützen keine Operatorüberladung, eine Funktionsüberladung ist jedoch häufig.
#include<iostream> using namespace std; int add(int a, int b) { return a + b; } string add(string a, string b) { return a + b; //concatenate } int main() { cout << "Addition of numbers: " << add(2, 7) << endl; cout << "Addition of Strings: " << add("hello", "World") << endl; }
Addition of numbers: 9 Addition of Strings: helloWorld
Das Enthalten von Polymorphismus wird als Subtypisierung bezeichnet. Dies ermöglicht die Verwendung von Basisklassenzeigern und Referenzen, um auf abgeleitete Klassen zu verweisen. Dies ist Laufzeitpolymorphismus. Wir kennen den tatsächlichen Objekttyp vor der Ausführung nicht. Wir benötigen virtuelle Funktionen in C++, um diesen Inklusionspolymorphismus zu erreichen.
#include<iostream> using namespace std; class Base { public: virtual void print() { cout << "This is base class." << endl; } }; class Derived : public Base { public: void print() { cout << "This is derived class." << endl; } }; int main() { Base *ob1; Base base_obj; Derived derived_obj; ob1 = &base_obj; //object of base class ob1->print(); ob1 = &derived_obj; //same pointer to point derived object ob1->print(); }
This is base class. This is derived class.
Das Erzwingen von Polymorphismus wird als Cast bezeichnet. Diese Art von Polymorphismus tritt auf, wenn ein Objekt oder Grundelement in einen anderen Typ konvertiert wird. Es gibt zwei Arten des Gießens. Implizite Konvertierungen werden mit dem Compiler selbst durchgeführt, explizite Konvertierungen erfolgen mit const_cast,dynamic_cast usw.
#include<iostream> using namespace std; class Integer { int val; public: Integer(int x) : val(x) { } operator int() const { return val; } }; void display(int x) { cout << "Value is: " << x << endl; } int main() { Integer x = 50; display(100); display(x); }
Value is: 100 Value is: 50
Parametrischer Polymorphismus wird als frühe Bindung bezeichnet. Diese Art von Polymorphismus ermöglicht die Verwendung desselben Codes für verschiedene Typen. Wir können es mithilfe von Vorlagen erhalten.
#include<iostream> using namespace std; template <class T> T maximum(T a, T b) { if(a > b) { return a; } else { return b; } } int main() { cout << "Max of (156, 78): " << maximum(156, 78) << endl; cout << "Max of (A, X): " << maximum('A', 'X') << endl; }
Max of (156, 78): 156 Max of (A, X): X
Das obige ist der detaillierte Inhalt vonArten von Polymorphismus – vorübergehend, enthalten, parametrisiert und erzwungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!