> 백엔드 개발 > C++ > C의 순수 가상 함수를 구현할 수 있습니까? 왜 그렇게 하시겠습니까?

C의 순수 가상 함수를 구현할 수 있습니까? 왜 그렇게 하시겠습니까?

Mary-Kate Olsen
풀어 주다: 2024-12-18 04:11:09
원래의
725명이 탐색했습니다.

Can Pure Virtual Functions in C   Have Implementations, and Why Would You Do That?

순수 가상 함수: 구현 및 목적

C에서 순수 가상 함수는 일반적으로 구현을 제공하지 않고 메서드의 인터페이스를 선언하는 것과 관련됩니다. 그러나 아래 그림과 같이 구현을 통해 순수 가상 함수를 갖는 것이 가능합니다.

class A {
public:
    virtual void f() = 0;
};

void A::f() {
    cout << "Test" << endl;
}
로그인 후 복사

이 코드는 구문적으로는 유효하지만 목적과 사용법에 대해서는 추가 설명이 필요합니다.

순수 가상 함수 구현 제공 목적:

기본 클래스는 순수 가상 함수 구현을 정의할 수 있습니다. 파생 클래스가 자체 구현을 제공해야 하는 경우에도 마찬가지입니다. 이 구현의 목적은 다음과 같습니다.

  • 기본 동작: 파생 클래스가 상속할 수 있는 기본 동작을 제공합니다. 그러나 파생 클래스는 이 기본 동작을 활용하려면 A::f()를 명시적으로 호출해야 합니다.
  • 공통 기능: 모든 파생 클래스에서 재사용할 수 있는 공통 기능 집합을 정의합니다. 기본 클래스에 구현을 제공함으로써 파생 클래스는 선택적으로 자체 사용자 정의와 함께 이 공통 기능을 호출할 수 있습니다.

기본 클래스 구현을 호출하는 방법:

파생 클래스는 전체 범위를 사용하여 순수 가상 함수의 기본 클래스 구현을 호출할 수 있습니다. 이름:

class B : public A {

    virtual void f() {
        // class B doesn't have anything special to do for f()
        //  so we'll call A's

        // note that A's declaration of f() would have to be public 
        //  or protected to avoid a compile time problem

        A::f();
    }

};
로그인 후 복사

사용 사례:

메서드에 대한 합리적인 기본 동작이 있는 시나리오를 고려해보세요. 그러나 클래스 디자이너는 이 기본 동작이 명시적으로만 호출되기를 원합니다. 기본 클래스에서 순수 가상 함수에 대한 구현을 제공하면 파생 클래스가 필요에 따라 이 기본 동작에 액세스하고 사용할 수 있습니다.

참고:

기술적으로는 가능하지만 순수 가상 기능에 대한 구현을 제공하는 것은 흔하지 않은 관행이며 혼란을 초래할 수 있습니다. 따라서 명확하고 정당한 사유가 없는 한 일반적으로 그렇게 하지 않는 것이 좋습니다.

위 내용은 C의 순수 가상 함수를 구현할 수 있습니까? 왜 그렇게 하시겠습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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