継承クラスで親クラスのメンバー変数が表示されない
クラスをテンプレートとして継承する場合、親クラスの保護された変数が表示されない場合があります。継承されたクラスで表示されます。これにより、継承されたクラス内のこれらの変数にアクセスするときにコンパイル エラーが発生する可能性があります。
次の例を考えてみましょう。
<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>
コンパイラは unownedArrayListType クラスを検出すると、insertAt 関数を検証しようとします。 。ただし、arrayListType クラスで宣言された長さとリスト変数は見つかりません。これにより、コンパイル エラーが発生します。
解決策
この問題を解決するには、次の 2 つの解決策が考えられます。
1.これを接頭辞として付けます->
継承された変数にこれを接頭辞として付けます->親クラス
<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 中国語 Web サイトの他の関連記事を参照してください。