반응형
RTTI (Run-Time Type Information)
• 실행시간에 객체 타입 조사
• 특정 조건에서는 컴파일 시간에도 조사 가능
타입 조사
• typeid 연산자
• dynamic_cast
typeid
객체 타입 정보를 std::type_info 타입의 객체 참조 반환
const, volatile, refernece 제외한 타입에 결과 반환
• t1 = t2
• t1.hash_code() == t2.hash_code()
• std::type_index(t1) == std::type_index(t2)
#include <iostream>
#include <typeinfo>
int main()
{
auto n = 10;
const std::type_info& t1 = typeid(n);
const std::type_info& t2 = typeid(3 + 4.1);
std::cout << "t1 = " << t1.name() << std::endl; // int
std::cout << "t2 = " << t2.name() << std::endl; // double
}
가상함수 있는 경우 vs 가상 함수 없는 경우
• 가상함수가 있는 경우 실행시간에 가리키는 메모리 조사해서 결정
• 가상함수 없는 경우 컴파일 시간에 타입 결정
[예제] 가상함수 있는 경우
#include <iostream>
#include <typeinfo>
class Animal
{
public:
virtual ~Animal() {} // 가상함수
};
class Dog : public Animal {};
int main()
{
Animal* p = new Dog;
std::cout << typeid(p).name() << std::endl; // Animal
std::cout << typeid(*p).name() << std::endl; // ??? --> Dog
delete p;
}
[예제] 가상함수 없는 경우
#include <iostream>
#include <typeinfo>
class Animal
{
public:
~Animal() {} // 가상 함수 X
};
class Dog : public Animal {};
int main()
{
Animal* p = new Dog;
std::cout << typeid(p).name() << std::endl; // Animal
std::cout << typeid(*p).name() << std::endl; // ??? --> Animal
delete p;
}
[예제] const, reference 제외
#include <iostream>
#include <typeinfo>
int main()
{
const std::type_info& t1 = typeid(int);
const std::type_info& t2 = typeid(int&);
const std::type_info& t3 = typeid(const int&);
const std::type_info& t4 = typeid(int*);
std::cout << (t1 == t2) << std::endl; // true
std::cout << (t1 == t3) << std::endl; // true
std::cout << (t1 == t4) << std::endl; // false
}
📌 [C++] 가상 함수 (virtual funciton)
[C++] 가상 함수 (virtual funciton)
가상 멤버 함수 (virtual function)동적 바인딩을 위해 사용class A{public: virtual void sub(void);}; [예제] 함수 재정의(overriding) 주의사항#include class Animal{public: void Cry() { std::cout Cry(); // ??? -> Dog? Animal?}Q) p-
zoosso.tistory.com
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] 가상함수와 디폴트 파라미터 (1) | 2025.02.27 |
---|---|
[C++] 추상 클래스 (abstract class) (1) | 2025.02.26 |
[C++] 가상 소멸자 (3) | 2025.02.24 |
[C++] 함수 바인딩 (Funciton Binding) (3) | 2025.02.22 |
[C++] mutable 키워드 (1) | 2025.02.21 |
댓글