상속 클래스에 부모 클래스 멤버 변수가 보이지 않음
클래스를 템플릿으로 상속할 때 부모 클래스의 보호 변수가 보이지 않을 수 있음 상속된 클래스에 표시됩니다. 이로 인해 상속된 클래스의 해당 변수에 액세스할 때 컴파일 오류가 발생할 수 있습니다.
다음 예를 고려하세요.
<code class="cpp">// Parent class template <class elemType> class arrayListType { protected: elemType *list; int length; // ... }; // Inherited class template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { public: void insertAt(int location, const elemType& insertItem); // ... };</code>
컴파일러는 unorderedArrayListType 클래스를 발견하면 insertAt 함수의 유효성을 검사하려고 시도합니다. . 그러나 arrayListType 클래스에 선언된 길이 및 목록 변수는 찾을 수 없습니다. 이로 인해 컴파일 오류가 발생합니다.
해결 방법
이 문제를 해결하려면 다음 두 가지 해결 방법이 있습니다.
1. 접두사 this->
상속 변수 접두사 this-> 상위 클래스에 속함을 명시적으로 지정합니다:
<code class="cpp">// Inherited class template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { public: void insertAt(int location, const elemType& insertItem) { this->length++; // ... } // ... };</code>
2. 선언 사용
상속 클래스의 비공개 섹션에서 상속 변수 선언:
<code class="cpp">// Inherited class template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { private: using arrayListType<elemType>::length; using arrayListType<elemType>::list; public: void insertAt(int location, const elemType& insertItem) { length++; // ... } // ... };</code>
두 방법 모두 컴파일러가 상속 변수가 상위 클래스에서 온 것임을 명시적으로 이해하도록 합니다. .
위 내용은 상속된 클래스의 상위 클래스 멤버 변수에 액세스할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!