Question:
What is RTTI?
Answer:
Runtime type identification (RTTI) lets you find the dynamic type of an object when you have only a pointer or a reference to the base type. RTTI is the official way in standard C++ to discover the type of an object and to convert the type of a pointer or reference (that is, dynamic typing). The need came from practical experience with C++. RTTI replaces many homegrown versions with a solid, consistent approach. Source: CoolInterview.com
In programming, RTTI (Runtime Type Information, or Runtime Type Identification) means keeping information about an object's data type in memory at runtime. Run-time type information can apply to simple data types, such as integers and characters, or to generic objects.
In the case of objects, some implementations are limited to keeping the inheritance tree while others include information about objects' methods and attributes.
Although available in several computer languages, RTTI, as a term, is typically used in relation to C++. In order for the dynamic_cast<> operation, the typeid operator or exceptions to work in C++, RTTI must be enabled. Source: CoolInterview.com
Answered by: ashish | Date: 4/23/2008
| Contact ashish
The information about the "type" of an object is stored in an object called "type_info". RTTI use this object to determine the type of the object at run time.
1. In c++ you need to have at least one virtual function to have the "type_info" object and thus use RTTI.
2. It contains overhead, as associated with virtual function m/c.
3. It usually indicates a BAD class design. Think again, and try to use virtual functions / polymorphism instead.
Source: CoolInterview.com
Answered by: madan kumar nath | Date: 2/15/2009
| Contact madan kumar nath
Using RTTI it is possible to determine the type of an object during run time. Yhe typeid() produces an object of type 'typeinfo' which is described in the header file 'typeinfo' . By using member function of this type we can also get the name of a type. ex:- #include<iostream> #include<typeinfo> using namespace std; int main() { int i=5; float f=20.4f; double d=23.222; cout<<" Data type of 'i' is :"<<typeid(ia).name()<<" its value is "<<i; cout<<" Data type of 'f' is :"<<typeid(f).name()<<" Its value is "<<f; cout<<" Data type of 'dc' is :"<<typeid(dc).name()<<" Its value is"<<dc; cout<<endl; }
Source: CoolInterview.com
Answered by: santosh kumar mallick | Date: 9/29/2009
| Contact santosh kumar mallick
While doing upcasting we can do it safely because a base class can always point to derived class.
But while doing downcasting we need to make sure that we downcast to correct class.
For that we need some facility to know whether the base class can be fit into the targeted derived class.
For that we use Run Time Type identification. The most commonly used is <dynamic_cast> if it returns NULL it means we are trying illegal downcast.
class a{} class b:public a{} class c{}
a *x1; b *y1 = new b(); c *z1 = new c();
x1 = y1;
y1 = dynamic_cast<b*>(x1); //ok
z1 = dynamic_cast<c*>(x1); //Not OK, hence returns NULL Source: CoolInterview.com
Answered by: Nitin | Date: 4/11/2010
| Contact Nitin
If you have the better answer, then send it to us. We will display your answer after the approval.
Rules to Post Answers in CoolInterview.com:-
- There should not be any Spelling Mistakes.
- There should not be any Gramatical Errors.
- Answers must not contain any bad words.
- Answers should not be the repeat of same answer, already approved.
- Answer should be complete in itself.
|