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