파생 클래스와 기본 클래스 간 포인터 간 암시적 변환
C에서 다음 코드는 오류를 발생시킵니다.
<code class="cpp">Child **cc = &c; Base **bb = cc;</code>
오류 메시지는 Child**에서 Base**로의 암시적 변환이 없음을 나타냅니다. 그러나 하위 포인터를 기본 포인터에 할당하는 것은 허용됩니다.
<code class="cpp">Child *c = new Child(); Base *b = c;</code>
이 차이가 존재하는 이유를 이해하려면 암시적 변환이 허용되면 어떤 일이 발생할지 생각해 보세요. 그런 다음 다음을 수행할 수 있습니다.
<code class="cpp">*bb = new Base;</code>
이렇게 하면 c가 Base 인스턴스를 가리키게 되어 파생 클래스와 기본 클래스의 개념을 위반하게 됩니다. 따라서 C에서는 이러한 암시적 변환을 금지합니다.
Child**와 Base** 간의 할당을 허용하려면 C 스타일 캐스트나 reinterpret_cast를 사용할 수 있지만 형식 안전성이 희생됩니다. 암시적 캐스트나 static_cast를 사용하여 이 변환을 수행할 수 있는 방법은 없습니다.
위 내용은 C에서 포인터 대 포인터를 기본 클래스로 암시적으로 변환할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!