막대 및 상자는 Foo의 파생 클래스이며 Foo는 가상 함수 F()를 가지고 막대 및 상자는 둘 다 함수 F()를 갖습니다. 내가 이해, 다형성 올바르게 Bar.F() 또는 Bar.F() 대신 Box.F() Bar.F() 수 Foo.F() 개체를 여부를 알지 않고 일부 런타임 루틴을 사용하여 재정의 할 수 있습니다. 바 또는 상자.C++ 다형성을 정확히 이해합니까?
Foo * boxxy = new Box;
boxxy->F();
권리 F()를 호출 마지막 줄 (이 경우, Box.F()) 박시는 상자 또는 바 또는 푸하는지 여부와 상관없이 (에 : 그것은이 같은 뭔가 이 경우 가상 Foo.F()의 구현이 호출됩니다.
이 권리를 이해합니까? boxxy가 Box 포인터 인 경우 무엇이 변경됩니까? 파생 클래스에 F()에 대한 재정의가 없으면 어떻게됩니까? 마지막으로 기본 클래스에 대한 함수를 구현하지 않고 다형성을 허용하려면 빈 함수 본문을 작성하고 가상으로 선언합니까? 감사.
고마워요. 그냥 호기심에서, 당신은 0 대신에 NULL을 사용할 수 있습니까? –
@Brandon : 아니오, 순수 가상 함수를 선언 할 때 아닙니다. 필요한 exakt 토큰은'= 0'이며 다른 것은 없습니다. 또한, 나는 당신이'NULL' 대신'0'을 사용하도록 권장 할 것이고, C++ 0x가 오면 포인터에'nullptr'을 사용할 것입니다. :) – Xeo