Computer >> Máy Tính >  >> Lập trình >> lập trình C

Các loại đa hình - Đặc biệt, Bao gồm, Tham số &Cưỡng chế

Ở đây chúng ta sẽ thấy các kiểu đa hình khác nhau. Các loại là -

  • Ad-Hoc
  • Sự hòa nhập
  • Tham số
  • Sự ép buộc

Đa hình Ad-Hoc được gọi là quá tải. Điều này cho phép chức năng có cùng tên hoạt động theo các cách khác nhau cho các kiểu khác nhau. Cả hàm và toán tử đều có thể bị quá tải. Một số ngôn ngữ không hỗ trợ nạp chồng toán tử, nhưng quá tải hàm là phổ biến.

Ví dụ

#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;
}

Đầu ra

Addition of numbers: 9
Addition of Strings: helloWorld

Đa hình Bao gồm được gọi là kiểu con. Điều này cho phép trỏ đến các lớp dẫn xuất bằng cách sử dụng con trỏ và tham chiếu của lớp cơ sở. Đây là đa hình thời gian chạy. Chúng tôi không biết loại đối tượng thực tế cho đến khi nó đang thực thi. Chúng ta cần hàm ảo trong C ++ để đạt được tính đa hình bao hàm này.

Ví dụ

#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();
}

Đầu ra

This is base class.
This is derived class.

Đa hình Coercion được gọi là ép kiểu. Loại đa hình này xảy ra khi một đối tượng hoặc nguyên thủy được đúc thành một số kiểu khác. Có hai loại đúc. Truyền ngầm được thực hiện bằng chính trình biên dịch và ép truyền rõ ràng được thực hiện bằng const_cast, dynamic_cast, v.v.

Ví dụ

#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);
}

Đầu ra

Value is: 100
Value is: 50

Đa hình tham số được gọi là Early Binding. Loại đa hình này cho phép sử dụng cùng một đoạn mã cho các kiểu khác nhau. Chúng ta có thể lấy nó bằng cách sử dụng các mẫu.

Ví dụ

#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;
}

Đầu ra

Max of (156, 78): 156
Max of (A, X): X