>백엔드 개발 >C++ >C 가상 함수를 다른 반환 유형으로 재정의할 수 있습니까?

C 가상 함수를 다른 반환 유형으로 재정의할 수 있습니까?

DDD
DDD원래의
2024-11-30 16:16:14389검색

Can C   Virtual Functions Be Overridden with Different Return Types?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.