12.10 동적형변환

보물창고·2021년 8월 16일
0

상향형변환을 하더라도...

: 파생클래스의 멤버변수에 접근할 수 없다.

  • 형변환을 통해서 파생클래스의 멤버에 접근할 수 있다.

동일한 부모를 상속한 클래스로 형변환을 하면...


-> base_to_d1 값이 null로 변경되어서 문제가 발생한다.

dynamic_cast는 캐스팅에 실패하면 null값을 반환한다.

  • nullptr 처리 결과

static_cast를 사용해보자.

: 형태는 안맞지만, 형변환 가능하면 해버려!
하지만 런타임에서 에러체크는 하지 않는다.

-> 오류는 없으나, 형변환 된것은 아니다.

  • 출력값을 보면 원본의 string 값이 나왔다.

최종 소스코드

#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;

}


캐스팅을 최소한으로 사용하자!

profile
🔥🔥🔥

0개의 댓글