Rumah >pembangunan bahagian belakang >C++ >Mengapakah Saya Tidak Boleh Mengakses Pembolehubah Ahli Kelas Induk dalam Kelas Warisan Saya?

Mengapakah Saya Tidak Boleh Mengakses Pembolehubah Ahli Kelas Induk dalam Kelas Warisan Saya?

DDD
DDDasal
2024-11-01 01:03:28500semak imbas

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

Pembolehubah Ahli Kelas Induk Tidak Kelihatan dalam Kelas Diwarisi

Apabila mewarisi kelas sebagai templat, pembolehubah dilindungi kelas induk mungkin tidak kelihatan dalam kelas yang diwarisi. Ini boleh membawa kepada ralat penyusunan apabila mengakses pembolehubah tersebut dalam kelas yang diwarisi.

Pertimbangkan contoh berikut:

<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>

Apabila pengkompil menemui kelas unorderedArrayListType, ia cuba mengesahkan fungsi insertAt . Walau bagaimanapun, ia tidak dapat mencari pembolehubah panjang dan senarai yang diisytiharkan dalam kelas arrayListType. Ini mengakibatkan ralat penyusunan.

Penyelesaian

Untuk menyelesaikan isu ini, terdapat dua penyelesaian yang mungkin:

1. Awalan dengan ini->

Membubuh awalan pembolehubah yang diwarisi dengan ini-> menyatakan dengan jelas bahawa mereka tergolong dalam kelas induk:

<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. Gunakan Pengisytiharan

Mengisytiharkan pembolehubah yang diwarisi dalam bahagian peribadi kelas yang diwarisi:

<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>

Kedua-dua kaedah memastikan pengkompil memahami dengan jelas bahawa pembolehubah yang diwarisi berasal daripada kelas induk .

Atas ialah kandungan terperinci Mengapakah Saya Tidak Boleh Mengakses Pembolehubah Ahli Kelas Induk dalam Kelas Warisan Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn