テンプレート: 継承されたクラスでの親クラスのメンバー変数の可視性
C テンプレートでは、親クラスのメンバー変数が非表示になる場合があります。デフォルトでは継承されたクラス。これにより、これらの変数にアクセスするときにコンパイル エラーが発生する可能性があります。
次の例を考えてみましょう。
<code class="cpp">template <class elemType> class arrayListType { protected: elemType *list; int length; }; template <class elemType> class unorderedArrayListType: public arrayListType<elemType> { void insertAt(int, const elemType&); // Function that uses 'list' and 'length' };</code>
継承されたクラス unownedArrayListType で、保護された変数のリストと長さに直接アクセスすると、次のようなエラーが発生します。 「『長さ』がこのスコープで宣言されていません」として。この問題を解決するには、派生クラス内でこれらの変数を明示的に宣言する必要があります。
これを行うには、主に 2 つのアプローチがあります。
「this」を使用する->」接頭辞:
各メンバー変数の前に this-> を付けます。例:
<code class="cpp">void insertAt(int location, const elemType& insertItem) { for (int i = this->length; i > location; i--) this->list[i] = this->list[i - 1]; this->list[location] = insertItem; this->length++; }</code>
宣言を使用:
派生クラスのプライベート セクションにメンバー変数の宣言を含めます。例:
<code class="cpp">class unorderedArrayListType: public arrayListType<elemType> { private: using arrayListType<elemType>::length; // Declare 'length' explicitly using arrayListType<elemType>::list; // Declare 'list' explicitly public: void insertAt(int, const elemType&); };</code>
以上がC テンプレートの継承クラスの保護されたメンバー変数にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。