>백엔드 개발 >C++ >C 상속에서 함수 이름 충돌을 어떻게 해결할 수 있나요?

C 상속에서 함수 이름 충돌을 어떻게 해결할 수 있나요?

Patricia Arquette
Patricia Arquette원래의
2024-12-21 16:02:10938검색

How Can I Resolve Function Name Collision in C   Inheritance?

파생 클래스의 함수 충돌

기본 클래스와 파생 클래스에서 이름은 같지만 시그니처가 다른 함수를 정의할 때 이름 조회 문제가 발생할 수 있습니다.

다음 사항을 고려하세요. code:

class A
{
public:
    void foo(string s){};
};

class B : public A
{
public:
    int foo(int i){};
};

class C : public B
{
public:
    void bar()
    {
        string s;
        foo(s);
    }
};

이 예에서 컴파일러는 클래스 C의 bar() 함수 내 기본 클래스 A의 foo() 함수에 액세스하려고 할 때 오류를 발생시킵니다. 이는 이름 조회가 찾기를 우선시하기 때문입니다. 가장 가까운 클래스(이 경우 B)의 함수는 A의 재정의된 함수를 간과합니다.

이 문제를 해결하려면 파생 클래스 B가 명시적으로 선언해야 합니다. using 지시문을 사용하여 재정의된 함수:

class B : public A
{
public:
    int foo(int i){};
    using A::foo;
};

using 지시문을 사용하여 B는 A의 foo() 함수를 자체 범위에 효과적으로 다시 도입하여 C와 같은 후속 파생 클래스에 표시되도록 합니다.

위 내용은 C 상속에서 함수 이름 충돌을 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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