클래스에 가상 함수가 하나라도 존재한다면 그 클래스의 인스턴스에는 가상함수 테이블이 추가됩니다.
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을 가리키는 새로운 포인터로 복사한다. 실제 자료를 변환하는건 아니다.
'C,C++ > 공부 낙서' 카테고리의 다른 글
공부하면서 빠트린 것들 끄적끄적 - 연산자 (0) | 2022.11.18 |
---|---|
공부하면서 빠트린 것들 끄적끄적 - 템플릿, 타입ID (0) | 2022.11.16 |
공부하면서 빠트린 것들 끄적끄적 - 헤더 참조 (0) | 2022.11.07 |
공부하면서 빠트린 것들 끄적끄적 - const (0) | 2022.11.04 |
공부하면서 빠트린 것들 끄적끄적 - 문자열, 배열, 클래스 (0) | 2022.11.03 |