C ++ không có phương thức trực tiếp để kiểm tra một đối tượng có phải là một thể hiện của một loại lớp nào đó hay không. Trong Java, chúng ta có thể có được loại cơ sở này.
Trong C ++ 11, chúng ta có thể tìm thấy một mục được gọi là is_base_of
Có thể đạt được chức năng gần nhất có thể có tương tự như "instanceof" bằng cách sử dụng dynamic_cast
Mã mẫu
#include <iostream> using namespace std; template<typename Base, typename T> inline bool instanceof(const T *ptr) { return dynamic_cast<const Base*>(ptr) != nullptr; } class Parent { public: virtual ~Parent() {} virtual void foo () { std::cout << "Parent\n"; } }; class Child : public Parent { public: virtual void foo() { std::cout << "Child\n"; } }; class AnotherClass{}; int main() { Parent p; Child c; AnotherClass a; Parent *ptr1 = &p; Child *ptr2 = &c; AnotherClass *ptr3 = &a; if(instanceof<Parent>(ptr1)) { cout << "p is an instance of the class Parent" << endl; } else { cout << "p is not an instance of the class Parent" << endl; } if(instanceof<Parent>(ptr2)) { cout << "c is an instance of the class Parent" << endl; } else { cout << "c is not an instance of the class Parent" << endl; } if(instanceof<Child>(ptr2)) { cout << "c is an instance of the class Child" << endl; } else { cout << "c is not an instance of the class Child" << endl; } if(instanceof<Child>(ptr1)) { cout << "p is an instance of the class Child" << endl; } else { cout << "p is not an instance of the class Child" << endl; } if(instanceof<AnotherClass>(ptr2)) { cout << "c is an instance of AnotherClass class" << endl; } else { cout << "c is not an instance of AnotherClass class" << endl; } }
Đầu ra
p is an instance of the class Parent c is an instance of the class Parent c is an instance of the class Child p is not an instance of the class Child c is not an instance of AnotherClass class