> 백엔드 개발 > C++ > 파생 클래스가 C에서 다른 반환 유형을 사용하여 가상 함수를 재정의할 수 있습니까?

파생 클래스가 C에서 다른 반환 유형을 사용하여 가상 함수를 재정의할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-12-11 08:35:11
원래의
716명이 탐색했습니다.

Can a Derived Class Override a Virtual Function with a Different Return Type in C  ?

C의 가상 함수 반환 유형

질문:

상속된 클래스가 템플릿을 사용하지 않고 다른 반환 유형을 가진 가상 함수 반품하시겠습니까?

답변:

어떤 경우에는 그렇습니다. 반환 유형이 원래 반환 유형과 공변적인 경우 파생 클래스가 다른 반환 유형으로 가상 함수를 재정의하는 것이 허용됩니다. 공분산은 파생 함수의 반환 유형이 기본 함수 반환 유형의 하위 유형임을 의미합니다.

다음 예를 고려하세요.

class Base {
public:
    virtual ~Base() {}

    virtual Base* clone() const = 0;
};

class Derived: public Base {
public:
    virtual Derived* clone() const {
        return new Derived(*this);
    }
};
로그인 후 복사

이 예에서 Base 클래스는 다음을 정의합니다. Base*를 반환하는 clone이라는 순수 가상 함수. Derived 클래스는 이 가상 함수를 재정의하고 Derived*를 반환합니다. 반환 유형이 기본 클래스와 다르더라도 Derived*는 Base*의 하위 유형이므로 이는 유효합니다.

일반적으로 함수의 반환 유형은 함수 시그니처의 일부로 간주되지 않습니다. 반환 유형이 공변적이라면 어떤 반환 유형으로도 멤버 함수를 재정의할 수 있습니다.

위 내용은 파생 클래스가 C에서 다른 반환 유형을 사용하여 가상 함수를 재정의할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿