C,C++/공부 낙서
공부하면서 빠트린 것들 끄적끄적 - 가상함수, 형변환
미오29살
2022. 11. 15. 11:39
클래스에 가상 함수가 하나라도 존재한다면 그 클래스의 인스턴스에는 가상함수 테이블이 추가됩니다.
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을 가리키는 새로운 포인터로 복사한다. 실제 자료를 변환하는건 아니다.