#include <iostream>
#include <vector>
#include <functional>
using namespace std;
class Base
{
public:
int m_i = 0;
virtual void print()
{
cout << "I'm Base" << "\n";
}
};
class Derived1 : public Base
{
public:
int m_j = 1024;
virtual void print() override
{
cout << "I'm derived" << "\n";
}
};
class Derived2 : public Base
{
public:
string m_name = "Dr. Two";
virtual void print() override
{
cout << "I'm derived" << "\n";
}
};
int main()
{
Derived1 d1;
Base *base = &d1; // m_j는 base에서는 접근 불가능.
auto *base_to_d1 = dynamic_cast<Derived1*>(base);
cout << base_to_d1->m_j << "\n";
// auto *base_to_d2 = dynamic_cast<Derived2*>(base); // dynamic cast는 실패하면 nullptr을 넣는다. // static_cast는 된다.
// 따라서 일반적으로 다음과 같은 if문을 추가한다.
//if (base_to_d2 != nullptr)
// cout << base_to_d2->m_name << "\n";
//else
// cout << "Failed" << "\n";
return 0;
}