C의 가상 메서드 개념은 다형성과 메서드 재정의를 달성하기 위한 강력한 메커니즘을 제공합니다. 그러나 질문이 생깁니다. 왜 프라이빗 메서드를 가상으로 만드는가?
상속의 맥락에서 프라이빗 메서드는 자신이 정의된 클래스 내에서만 액세스할 수 있습니다. 논리적으로 프라이빗 메서드를 가상으로 만드는 것은 다음과 같다고 가정할 수도 있습니다. 파생 클래스에서 액세스하거나 재정의할 수 없기 때문에 유용하지 않습니다.
그러나 개인 메서드를 다음과 같이 선언하면 상당한 이점이 있습니다. virtual:
C 프로그래밍 분야의 선도적인 전문가인 Herb Sutter의 설명에 따르면, 비공개 메서드를 virtual로 만들면 파생 클래스가 메서드의 비공개 특성을 유지하면서 메서드 구현을 재정의할 수 있습니다. 이는 파생 클래스가 메서드를 외부 호출자에게 노출하지 않고 메서드의 동작을 사용자 정의할 수 있음을 의미합니다.
예를 들어 다음 예제를 고려하세요.
class HTMLDocument : public Document, public CachedResourceClient {
private:
virtual bool childAllowed(Node*);
virtual PassRefPtr createElement(const AtomicString& tagName, ExceptionCode&);
};
여기서 childAllowed와 createElement는 모두 비공개 가상 메서드입니다. HTMLDocument의 파생 클래스는 이러한 메서드를 재정의하여 특정 요구 사항에 맞게 동작을 조정할 수 있습니다. 그러나 이러한 메서드는 파생 클래스 외부에서 액세스할 수 없으며 기본 클래스의 캡슐화를 유지합니다.
요약하면 프라이빗 메서드를 가상으로 만드는 것은 개인 정보 보호를 유지하면서 파생 클래스에서 상속된 메서드 구현을 사용자 정의할 수 있는 강력한 메커니즘을 제공합니다. 그 방법들 중. 이를 통해 캡슐화 원칙을 손상시키지 않으면서 유연성과 확장성을 높일 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3