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

mẫu is_abstract 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_abstract trong C ++ STL.

Mẫu Is_abstract giúp kiểm tra xem lớp có phải là lớp trừu tượng hay không.

Lớp trừu tượng là gì?

Lớp trừu tượng là lớp có ít nhất một Hàm ảo thuần túy. Chúng ta sử dụng các lớp Trừu tượng vì khi chúng ta định nghĩa hàm, chúng ta không biết việc triển khai của nó, vì vậy nó rất hữu ích trong trường hợp chúng ta không biết hàm của một lớp phải làm gì thêm nhưng chúng ta chắc chắn rằng có phải là một chức năng như thế này trong hệ thống của chúng tôi. Vì vậy, chúng tôi khai báo một hàm ảo thuần túy chỉ được khai báo và không có việc triển khai hàm đó.

Vì vậy, khi chúng ta muốn kiểm tra từ thể hiện của lớp xem lớp đó có phải là lớp Trừu tượng hay không, chúng ta sử dụng is_abstract ().

is_abstract () được kế thừa từ itegral_constant và cung cấp true_type hoặc false_type, tùy thuộc vào thể hiện của lớp T có phải là kiểu lớp đa hình hay không.

Cú pháp

template <class T> struct is_abstract;

Tham số

Mẫu này chỉ có thể có một tham số T, thuộc loại lớp để kiểm tra xem lớp T có phải là lớp trừu tượng hay không.

Giá trị trả về

Hàm này trả về giá trị kiểu bool, true hoặc false.

Nó trả về true nếu T là một lớp trừu tượng và false nếu T không phải là một lớp trừu tượng.

Ví dụ

#include <iostream>
#include <type_traits>
using namespace std;
struct TP_1 {
   int var;
};
struct TP_2 {
   virtual void dummy() = 0;
};
class TP_3 : TP_2 {
};
int main() {
   cout << boolalpha;
   cout << "checking for is_abstract: ";
   cout << "\nstructure TP_1 with one variable :"<< is_abstract<TP_1>::value;
   cout << "\nstructure TP_2 with one virtual variable : "<< is_abstract<TP_2>::value;
   cout << "\nclass TP_3 which is derived from TP_2 structure : "<< is_abstract<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_abstract:
structure TP_1 with one variable : false
structure TP_2 with one virtual variable : true
class TP_3 which is derived from TP_2 structure : true

Ví dụ

#include <iostream>
#include <type_traits>
using namespace std;
struct TP_1 {
   virtual void dummy() = 0;
};
class TP_2 {
   virtual void dummy() = 0;
};
struct TP_3 : TP_2 {
};
int main() {
   cout << boolalpha;
   cout << "checking for is_abstract: ";
   cout << "\nstructure TP_1 with one virtual function :"<< is_abstract<TP_1>::value;
   cout << "\nclass TP_2 with one virtual function : "<< is_abstract<TP_2>::value;
   cout << "\nstructure TP_3 which is derived from TP_2 class : "<< is_abstract<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_abstract:
structure TP_1 with one virtual function : true
class TP_2 with one virtual function : true
structure TP_3 which is derived from TP_2 class : true