C에서 다양한 반환 유형으로 가상 함수 재정의
C에서 가상 함수의 주요 기능 중 하나는 특수한 구현을 제공하기 위한 파생 클래스. 그러나 재정의 함수에서 다른 반환 유형을 사용하는 것이 허용되는지가 항상 명확한 것은 아닙니다.
대부분의 경우 반환 유형이 특정 제약 조건을 준수한다면 대답은 예입니다. 특히 반환 유형은 원래 반환 유형과 공변이어야 합니다. 공분산은 재정의 함수의 반환 유형이 원래 반환 유형의 하위 유형이거나 암시적으로 원래 반환 유형으로 변환 가능해야 함을 의미합니다.
다음 예를 고려하세요.
class Base { public: virtual ~Base() {} virtual Base* clone() const = 0; // pure virtual function }; class Derived: public Base { public: virtual Derived* clone() const { return new Derived(*this); } };
이 예에서 기본 클래스는 Base*를 반환하는 순수 가상 함수 복제본을 정의합니다. Derived 클래스는 복제본을 재정의하고 Derived*를 반환합니다. 이는 Derived*가 Base*의 하위 유형이기 때문에 허용됩니다.
일반적으로 모든 함수의 반환 유형은 C에서 해당 서명의 일부로 간주되지 않습니다. 따라서 공분산 규칙을 충족하는 한 모든 반환 유형으로 멤버 함수를 재정의할 수 있습니다. 이를 통해 파생 클래스는 계약 요구 사항을 위반하지 않고 가상 함수의 보다 구체적인 구현을 제공할 수 있습니다.
위 내용은 C 가상 함수를 다른 반환 유형으로 재정의할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!