>백엔드 개발 >C++ >순수 가상 함수를 C로 구현할 수 있나요?

순수 가상 함수를 C로 구현할 수 있나요?

Susan Sarandon
Susan Sarandon원래의
2024-12-18 12:13:15878검색

Can Pure Virtual Functions Have Implementations in C  ?

순수 가상 함수: 구현 가능성 공개

순수 가상 함수의 개념은 일반적으로 기본 클래스 내에 구현이 없는 것과 관련이 있습니다. . 그러나 순수 가상 함수가 실제로 구현을 가질 수 있다는 사실은 놀랄 수도 있습니다.

C에서는 기본 클래스 내에서 함수 본문 없이 "= 0"을 사용하여 순수 가상 함수를 선언합니다. 그러나 기본 클래스는 여전히 순수 가상 함수에 대한 구현을 정의할 수 있습니다. 이 구현은 외부 클래스에서 직접 액세스할 수 없지만 전체 범위 이름을 사용하여 파생 클래스에서 명시적으로 호출할 수 있습니다.

다음 코드 조각을 고려하세요.

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

void A::f() {
    cout << "Test" << endl;
}

이 예에서는 클래스 A는 순수 가상 함수 f()를 정의하지만 구현도 제공합니다. 그런 다음 파생 클래스 B는 전체 범위 이름 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로 연습하세요. 그러나 특정 시나리오에서는 유연성과 사용자 정의를 제공할 수 있는 유효한 옵션입니다.

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

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