Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ประเภทของความหลากหลาย - Ad-hoc, Inclusion, Parametric &Coercion


ที่นี่เราจะเห็นความแตกต่างประเภทต่างๆ ประเภทคือ −

  • เฉพาะกิจ
  • รวม
  • พาราเมตริก
  • บังคับ

Ad-Hoc polymorphism เรียกว่าโอเวอร์โหลด ซึ่งช่วยให้ฟังก์ชันที่มีชื่อเดียวกันทำงานในลักษณะที่แตกต่างกันสำหรับประเภทต่างๆ ทั้งฟังก์ชันและตัวดำเนินการสามารถโอเวอร์โหลดได้ บางภาษาไม่รองรับโอเปอเรเตอร์โอเวอร์โหลด แต่ฟังก์ชันโอเวอร์โหลดเป็นเรื่องปกติ

ตัวอย่าง

#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

Parametric polymorphism เรียกว่า 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