C equivalent of java's instanceof
Interview Questions practice on Codemia
Over 8,000 real interview questions from top companies, searchable by company and role.
C++ does not have a direct equivalent to Java's instanceof operator, which is used to check if an object is an instance of a specific class or subclass. However, C++ offers several runtime type identification (RTTI) mechanisms that can achieve similar functionality. This article explores these options, examines their usage, and provides detailed examples to enhance understanding.
Understanding C++ Type Identification
C++ provides RTTI through the use of three primary constructs:
dynamic_casttypeid- Custom Type Identification (using virtual functions)
Dynamic Cast
dynamic_cast is used primarily for safe downcasting in a class hierarchy. It works only with polymorphic types (i.e., classes with virtual functions).
Example
In this example, dynamic_cast attempts to cast b to a pointer of type Derived. If b actually points to an object of Derived type, the cast succeeds; otherwise, it returns nullptr.
Typeid
typeid is another RTTI tool that allows you to extract type information at runtime. While it doesn't mimic instanceof directly, it can be used to compare types.
Example
The typeid operator compares the type of the object pointed to by b with that of Derived. If they match, the program confirms that b is an instance of Derived.
Custom Type Identification
Sometimes, a custom method using virtual functions can be more appropriate, especially when performance is critical, or when you need compatibility with non-polymorphic classes.
Example
With this method, every class provides an implementation for getType(), which returns a unique string identifier. This way, you can assure type safety even without RTTI support.
Key Differences: dynamic_cast, typeid, and Custom Methods
To wrap up, here is a comparison table summarizing the key points of the discussed type identification methods:
| Feature | dynamic_cast | typeid | Custom Method |
| Polymorphic Requirement | Yes | Yes | No |
| Null Check | Required (for pointer casting) | Not applicable | Not applicable |
| Compile-Time Check | Limited | Yes | No |
| Runtime Overhead | May have overhead if casting fails | May have slight overhead | Minimal |
| Complexity | Low | Low | Custom implementation required |
Conclusion
In C++, while there isn't a one-size-fits-all replacement for Java's instanceof, understanding and utilizing RTTI tools like dynamic_cast and typeid, in addition to custom identification solutions, will help you check object types effectively. Understanding the pros and cons of each approach allows you to choose the most appropriate one for any given situation.
Related reading
- C equivalent to Java's Exception.printStackTrace?
- C# Java HashMap equivalent
- C# version of java's synchronized keyword?
- C version of java's synchronized keyword?
- C functor library for evaluating mathematical/arithmetic expressions
- C group where algorithm
- C vs Java Enum for those new to C
- Calculate date/time difference in java

OOD Fundamentals
Master object-oriented design from first principles, SOLID, design patterns, and classic interview problems with hands-on coding.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Interview Questions practice on Codemia
Over 8,000 real interview questions from top companies, searchable by company and role.