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

mẫu is_polymorphic trong C ++

Trong bài viết này, chúng ta sẽ thảo luận về cách làm việc, cú pháp và các ví dụ của mẫu std ::is_polymorphic trong C ++ STL.

is_polymorphic là một mẫu nằm trong tệp tiêu đề trong C ++. Mẫu này được sử dụng để kiểm tra xem lớp có phải là một lớp đa hình hay không và trả về kết quả đúng hoặc sai tương ứng.

Lớp đa hình là gì?

Một lớp khai báo hàm ảo từ một lớp trừu tượng nơi khai báo hàm ảo. Lớp này có khai báo hàm ảo được khai báo trong lớp khác.

Cú pháp

template <class T> is_polymorphic;

Tham số

Mẫu chỉ có thể có tham số kiểu T và kiểm tra xem kiểu đã cho có phải là lớp đa hình hay không.

Giá trị trả về

Nó trả về giá trị Boolean, true nếu kiểu đã cho là lớp đa hình và false nếu kiểu đã cho không phải là lớp đa hình.

Ví dụ

Input: class B { virtual void fn(){} };
   class C : B {};
   is_polymorphic<B>::value;
Output: True

Input: class A {};
   is_polymorphic<A>::value;
Output: False

Ví dụ

#include <iostream>
#include <type_traits>
using namespace std;
struct TP {
   virtual void display();
};
struct TP_2 : TP {
};
class TP_3 {
   virtual void display() = 0;
};
struct TP_4 : TP_3 {
};
int main() {
   cout << boolalpha;
   cout << "Checking for is_polymorphic: ";
   cout << "\n structure TP with one virtual function : "<<is_polymorphic<TP>::value;
   cout << "\n structure TP_2 inherited from TP: "<<is_polymorphic<TP_2>::value;
   cout << "\n class TP_3 with one virtual function: "<<is_polymorphic<TP_3>::value;
   cout << "\n class TP_4 inherited from TP_3: "<< is_polymorphic<TP_4>::value;
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Checking for is_polymorphic:
structure TP with one virtual function : true
structure TP_2 inherited from TP: true
class TP_3 with one virtual function: true
class TP_4 inherited from TP_3: true

Ví dụ

#include <iostream>
#include <type_traits>
using namespace std;
struct TP {
   int var;
};
struct TP_2 {
   virtual void display();
};
class TP_3: TP_2 {
};
int main() {
   cout << boolalpha;
   cout << "Checking for is_polymorphic: ";
   cout << "\n structure TP with one variable : "<<is_polymorphic<TP>::value;
   cout << "\n structure TP_2 with one virtual function : "<<is_polymorphic<TP_2>::value;
   cout << "\n class TP_3 inherited from structure TP_2: "<<is_polymorphic<TP_3>::value;
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Checking for is_polymorphic:
structure TP with one variable : false
structure TP_2 with one virtual function : true
class TP_3 inherited from structure TP_2 : true