: 파생클래스의 멤버변수에 접근할 수 없다.
-> base_to_d1 값이 null로 변경되어서 문제가 발생한다.
dynamic_cast는 캐스팅에 실패하면 null값을 반환한다.
: 형태는 안맞지만, 형변환 가능하면 해버려!
하지만 런타임에서 에러체크는 하지 않는다.
-> 오류는 없으나, 형변환 된것은 아니다.
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
using namespace std;
class Base
{
public :
int mNum = 0;
virtual void print()
{
cout << "I'm Base " << endl;
}
};
class Derived : public Base
{
public :
string mName = "Dr.1 ";
virtual void print() override
{
cout << "I'm derived" << endl;
}
};
class Derived2 : public Base
{
public:
string mName = "Dr. 222";
virtual void print() override
{
cout << "I'm derived2" << endl;
}
};
int main()
{
Derived d1;
Base *b = &d1;
auto *base_to_d1 = static_cast<Derived2 *>(b);
if (base_to_d1 == nullptr)
{
cout << "nullptr" << endl;
}
else
cout << base_to_d1->mName << endl;
}
캐스팅을 최소한으로 사용하자!