본문 바로가기

C,C++/공부 낙서

공부하면서 빠트린 것들 끄적끄적 - 가상함수, 형변환

클래스에 가상 함수가 하나라도 존재한다면 그 클래스의 인스턴스에는 가상함수 테이블이 추가됩니다.

 

A라는 클래스의 인스턴스가 여러개 존재할 때 메모리 상에는 인스턴스별로 각각의 자료를 할당받지만

A클래스의 함수들은 단 한 개씩만 메모리상에 할당이 됩니다. 그래서 각 인스턴스 별로 해당 함수를

호출하면 똑같은 위치의 그 함수를 불러옵니다.

 

 

ㅡㅡㅡㅡ형변환ㅡㅡㅡㅡ

Person 클래스 : 부모는 Object이며 void SetVisibility()를 가지고 있음.

 

Array<Object*> _array[50];

_array[0]  = new Person;

_array[0].SetVisibility() // 에러! Object클래스에는 SetVisibility()함수가 없기 때문.

Person* _person = dynamic_cast<Person*>(_array[0]);   // 이렇게 안전하게 다운캐스팅을 해서 Object를 

//가리키는 포인터를 Person을 가리키는 새로운 포인터로 복사한다. 실제 자료를 변환하는건 아니다.