>백엔드 개발 >C++ >C 멤버는 정적 멤버이자 가상 멤버일 수 있나요?

C 멤버는 정적 멤버이자 가상 멤버일 수 있나요?

DDD
DDD원래의
2024-10-30 19:09:30504검색

Can C   Members Be Both Static and Virtual?

C 멤버는 정적이면서 가상일 수 있나요?

C에서는 멤버를 정적과 가상 모두 선언할 수 없습니다. static virtual member()와 같은 선언 컴파일; 오류가 발생합니다.

그러나 다음 방법을 사용하면 비슷한 효과를 얻을 수 있습니다.

  • 별도의 함수: 정적 함수와 비 함수를 정의합니다. -동일한 이름을 가진 정적 가상 함수. 가상이 아닌 함수는 클래스에서 직접 호출하거나 파생 클래스에서 재정의할 수 있는 반면 정적 함수는 기본 클래스 구현에 대한 액세스를 제공합니다.
  • 오버로드된 함수: 동일한 이름(하나는 정적이고 하나는 비정적 가상). 컴파일러는 호출 컨텍스트에 따라 적절한 함수를 선택합니다.

예는 다음과 같습니다.

<code class="cpp">struct Object
{
    static const TypeInformation& GetTypeInformation();
    virtual const TypeInformation& GetTypeInformation() const;
};

struct SomeObject : public Object
{
    static const TypeInformation& GetTypeInformation();
    virtual const TypeInformation& GetTypeInformation() const override;
};</code>

이렇게 하면 객체(객체->) 모두에서 GetTypeInformation()을 호출할 수 있습니다. ;GetTypeInformation()) 및 클래스(SomeObject::GetTypeInformation()). Object::GetTypeInformation()은 기본 클래스 구현을 반환하고 SomeObject::GetTypeInformation()은 재정의된 버전을 호출합니다.

위 내용은 C 멤버는 정적 멤버이자 가상 멤버일 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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