A *a = new A;

B *b = new B;

b = (B*)a;


Derived class 포인터로 Base class 포인터를 다운캐스팅하여 할당해도

Derived class만의 함수들을 사용할 수 있는거야?



내 상식선에서는 말이 안되는데..


a는 new B가 아닌 new A를 할당한건데

a는 A클래스만을 위한 것이고 이걸 B로 다운캐스팅한다고해서 B의 함수들을 사용할 수 있는거야? 

b->output(); 이거 컴파일 오류나 런타임 오류 날줄 알았는데 정상 출력된다.

이게 왜 맞는지 이해좀 시켜줄 수 없니? 


원래 다운캐스팅이라는게 

A *a = new B;

B *b = (B*)a; 이럴때 쓰라고 있는거 아니야?


구글에 검색해도 안 나오더라 ㅠㅜ.