파생 클래스의 함수 충돌
기본 클래스와 파생 클래스에서 이름은 같지만 시그니처가 다른 함수를 정의할 때 이름 조회 문제가 발생할 수 있습니다.
다음 사항을 고려하세요. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!