首頁 > 後端開發 > C++ > 為什麼我無法存取繼承類別中的父類別成員變數?

為什麼我無法存取繼承類別中的父類別成員變數?

DDD
發布: 2024-11-01 01:03:28
原創
511 人瀏覽過

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>
登入後複製

當編譯器遇到 unorderedArrayListType 類別時,它會嘗試驗證 insertAt 函數。但是,它找不到 arrayListType 類別中宣告的 length 和 list 變數。這會導致編譯錯誤。

解決方案

要解決這個問題,有兩種可能的解決方案:

1。前綴為this->

繼承的變數前綴為this->明確指定它們屬於父類別:

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板