Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

다형성 유형 - 임시, 포함, 매개변수 및 강제

<시간/>

여기에서 다양한 유형의 다형성을 볼 수 있습니다. 유형은 -

  • 임시
  • 포함
  • 파라메트릭
  • 강압

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.

강제 다형성을 캐스팅(casting)이라고 합니다. 이러한 유형의 다형성은 객체 또는 기본 요소가 다른 유형으로 캐스팅될 때 발생합니다. 캐스팅에는 두 가지 유형이 있습니다. 암시적 캐스팅은 컴파일러 자체를 사용하여 수행되고 명시적 캐스팅은 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

파라메트릭 다형성을 Early Binding이라고 합니다. 이 유형의 다형성을 사용하면 다른 유형에 대해 동일한 코드를 사용할 수 있습니다. 템플릿을 사용하여 얻을 수 있습니다.

예시

#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