首頁  >  文章  >  後端開發  >  如何在 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>

在繼承類別unorderedArrayListType 中,直接存取受保護的變數清單和長度將導致以下錯誤因為“'長度'未在此範圍內聲明” 。要解決這個問題,我們需要在衍生類別中明確聲明這些變數。

有兩種主要方法可以實現此目的:

  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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn