その先にあるもの…

[C++] dynamic_cast 본문

프로그래밍

[C++] dynamic_cast

specialJ 2018. 12. 12. 17:38

사용


기본 클래스에서 파생 클래스로의 다운캐스팅

다중 상속에서 기본 클래스간에 캐스팅



제약

상속관계에서 사용

가상 함수가 1개 이상 꼭 필요

RTTI( runtime type information)이 활성



#include "stdafx.h"

#include <iostream>


using namespace std;


class C0

{

public:

int i = 0;


virtual void print() { cout << "C0 class" << endl;  }

};


class C1

{

public:

int i = 0;


virtual void print() { cout << "C1 class" << endl; }

};



class D0 : public C0

{

public:

float f = 1.0f;


void print() { cout << "D0 class" << endl; }

};



class D1 : public C0, public C1

{

public:

void print() { cout << "D1 class" << endl; }

};


void main()

{

C0* pBase = new C0;

C0* pChild1 = new D0;

D0* pChild2 = new D0;

D0* pChild = nullptr;


//error C0*에서 D0*로 변환할 수 없다.

//pChild = pBase;



//컴파일오류가 발생하지 않고 pChild는 nullptr이 된다.

pChild = dynamic_cast<D0*>(pBase);

if (pChild == nullptr)

cout << "failed to casting" << endl;


//error C0*에서 D0*로 변환할 수 없다.

//pChild = pChild1;


pChild = dynamic_cast<D0*>(pChild1);

if (pChild)

pChild->print();    //D0 class




C0* pBase1 = NULL;

C1*   pBase2 = new D1;


pBase1 = dynamic_cast<C0*>(pBase2);

if (pBase1)

pBase1->print();     //D1 class

}

'프로그래밍' 카테고리의 다른 글

정규표현식  (0) 2022.11.18
정규표현식 정리  (0) 2019.09.18
[C++]const_cast  (0) 2018.12.12
[C++]LNK2019  (0) 2018.10.19
[SHELL SCRIPT] 쉘스크립트IF  (0) 2018.03.29
Comments