Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++ 프로그램의 RTTI(런타임 유형 정보)

<시간/>

이 섹션에서는 C++의 RTTI(런타임 유형 정보)가 무엇인지 알아봅니다. C++에서 RTTI는 런타임 동안 개체의 데이터 유형에 대한 정보를 노출하는 메커니즘입니다. 이 기능은 클래스에 하나 이상의 가상 기능이 있는 경우에만 사용할 수 있습니다. 프로그램이 실행될 때 개체의 유형을 결정할 수 있습니다.

다음 예에서는 첫 번째 코드가 작동하지 않습니다. "cannot dynamic_cast base_ptr(Type Base*) to type 'class Derived*'(소스 유형이 다형성이 아님)"와 같은 오류가 생성됩니다. 이 오류는 이 예제에 가상 함수가 없기 때문에 발생합니다.

예시 코드

#include<iostream>
using namespace std;
class Base { };
class Derived: public Base {};
int main() {
   Base *base_ptr = new Derived;
   Derived *derived_ptr = dynamic_cast<Derived*>(base_ptr);
   if(derived_ptr != NULL)
      cout<<"It is working";
   else
      cout<<"cannot cast Base* to Derived*";
   return 0;
}

이제 가상 메서드를 추가하면 작동합니다.

예시 코드

#include<iostream>
using namespace std;
class Base {
   virtual void function() {
      //empty function
   }
};
class Derived: public Base {};
int main() {
   Base *base_ptr = new Derived;
   Derived *derived_ptr = dynamic_cast<Derived*>(base_ptr);
   if(derived_ptr != NULL)
      cout<<"It is working";
   else
      cout<<"cannot cast Base* to Derived*";
   return 0;
}

출력

It is working