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 포인터를 반환하는 순수 가상 함수 복제본을 정의합니다. Derived 클래스에서는 Derived 포인터를 반환하도록 clone 함수가 재정의되었습니다. 이는 Derived가 Base의 파생 클래스이고 Derived 포인터가 암시적으로 Base 포인터로 변환될 수 있기 때문에 허용됩니다.
위 내용은 C 가상 함수는 언제 공변 반환 유형을 가질 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!