typeid(C++)/instanceof(Java) 차이점

Java의 instanceof 연산자처럼, C++에서도 typeid 연산자를 사용하면 반환된 type_info객체를 통해 타입을 알 수 있다. 게임 프로젝트를 위해 두 함수를 비교하던 도중, 서로 다르게 동작하는 부분이 있어 이 글을 작성한다.

Java에서는 B 클래스가 A 클래스를 상속받을 경우, 객체 b에 대한 instanceof 연산자는 부모 클래스와 자식 클래스 모두 true를 반환한다.

// package와 main함수는 생략
class A{}
class B extends A{}

A a = new A();
B b = new B();

// b instanceof A: true
// b instanceof B: true

C++의 typeid 연산자는 완전히 똑같은 클래스여야만 true를 반환한다.

#include <iostream>
#include <string>
#include <typeinfo>

class Animal
{};

class Dog : Animal
{};

int main()
{
	Animal Cat;
	Dog Maltese;

	if ((typeid(Cat) == typeid(Animal)) == true)
	{
		std::cout << "Cat type: Animal" << std::endl;
	}

	if ((typeid(Maltese) == typeid(Animal)) == true)
	{
		std::cout << "Maltese type: Animal" << std::endl;
	}

	if ((typeid(Maltese) == typeid(Dog)) == true)
	{
		std::cout << "Maltese type: Dog" << std::endl;
	}
    
	// 출력 결과
	// Cat type: Animal
	// Maltese type: Dog

	return 0;
}