ホームページ  >  記事  >  バックエンド開発  >  C テンプレートの継承クラスの保護されたメンバー変数にアクセスするにはどうすればよいですか?

C テンプレートの継承クラスの保護されたメンバー変数にアクセスするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-30 09:23:03915ブラウズ

How to Access Protected Member Variables in Inherited Classes in C   Templates?

テンプレート: 継承されたクラスでの親クラスのメンバー変数の可視性

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 つのアプローチがあります。

  1. 「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>
  2. 宣言を使用:

    派生クラスのプライベート セクションにメンバー変数の宣言を含めます。例:

    <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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。