여기서 다양한 유형의 다형성을 볼 수 있습니다. -
Ad-Hoc 다형성을 오버로딩이라고 합니다. 이를 통해 동일한 이름을 가진 함수가 유형에 따라 다르게 작동할 수 있습니다. 함수와 연산자 모두 오버로드될 수 있습니다. 일부 언어에서는 연산자 오버로딩을 지원하지 않지만 함수 오버로딩이 일반적입니다.
#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
다형성을 포함하는 것을 하위 유형화라고 합니다. 이를 통해 파생 클래스를 가리키는 기본 클래스 포인터와 참조를 사용할 수 있습니다. 이것이 런타임 다형성입니다. 실행 전에는 실제 객체 유형을 알 수 없습니다. 이러한 포함 다형성을 달성하려면 C++에 가상 함수가 필요합니다.
#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.
다형성을 강제하는 것을 캐스트라고 합니다. 이러한 유형의 다형성은 객체나 기본 요소가 다른 유형으로 변환될 때 발생합니다. 캐스팅에는 두 가지 유형이 있습니다. 암시적 변환은 컴파일러 자체를 사용하여 수행되고 명시적 변환은 const_cast, Dynamic_cast 등을 사용하여 수행됩니다.
#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
파라메트릭 다형성을 초기 바인딩이라고 합니다. 이러한 유형의 다형성을 통해 다양한 유형에 동일한 코드를 사용할 수 있습니다. 템플릿을 사용하여 얻을 수 있습니다.
#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
위 내용은 다형성 유형 - 임시, 포함, 매개변수화 및 강제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!