ホームページ  >  記事  >  バックエンド開発  >  継承されたクラスの親クラスのメンバー変数にアクセスできないのはなぜですか?

継承されたクラスの親クラスのメンバー変数にアクセスできないのはなぜですか?

DDD
DDDオリジナル
2024-11-01 01:03:28424ブラウズ

Why Can't I Access Parent Class Member Variables in My Inherited Class?

継承クラスで親クラスのメンバー変数が表示されない

クラスをテンプレートとして継承する場合、親クラスの保護された変数が表示されない場合があります。継承されたクラスで表示されます。これにより、継承されたクラス内のこれらの変数にアクセスするときにコンパイル エラーが発生する可能性があります。

次の例を考えてみましょう。

<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&amp; 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&amp; 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&amp; insertItem) {
        length++;
        // ...
    }
    // ...
};</code>

どちらのメソッドも、継承された変数が親クラスからのものであることをコンパイラーが明示的に理解することを保証します。 .

以上が継承されたクラスの親クラスのメンバー変数にアクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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