Rumah >pembangunan bahagian belakang >C++ >## Bagaimanakah Pembayangan boleh Mempengaruhi Akses Pembolehubah dalam Kelas dalam C?
Membayangkan Pembolehubah dalam Kelas: Satu Teka-teki
Siasatan ini berpusat di sekitar gelagat pembolehubah yang ditakrifkan dalam kelas. Pertimbangkan kelas berikut bernama Measure:
<code class="c++">class Measure { int N; double measure_set[]; char nomefile[]; double T; // ... };</code>
Matlamatnya adalah untuk melaksanakan kaedah get yang membaca data daripada fail .dat ke dalam tatasusunan measure_set dan input pengguna ke dalam pembolehubah T. Walau bagaimanapun, pelaksanaan yang disediakan nampaknya menyimpan nilai T dalam measure_set[0].
Memahami Bayangan
Dalam C , adalah mungkin untuk mengisytiharkan pembolehubah dengan nama yang sama dalam skop yang berbeza. Ini dikenali sebagai bayang-bayang. Pengkompil mengaitkan setiap pembolehubah dengan skop masing-masing, dan dalam skop itu, definisi setempat pembolehubah diutamakan berbanding mana-mana pengisytiharan lain dengan nama yang sama.
Dalam kod yang disediakan, pembolehubah T ditakrifkan sebagai kedua-dua ahli pembolehubah kelas Measure dan sebagai pembolehubah tempatan dalam kaedah get. Apabila cuba mendapatkan semula pembolehubah ahli T dalam kaedah, ia sebaliknya mengakses debido pembolehubah setempat kepada membayangi.
Mengelakkan Pembayangan
Untuk menyelesaikan isu ini, adalah perlu untuk mengelakkan bayangan dengan menggunakan nama unik untuk pembolehubah dalam skop yang berbeza. Konvensyen biasa adalah untuk mengawal pembolehubah ahli dengan pengecam yang sesuai, seperti "m_" atau "this_". Ini memastikan ia kekal berbeza daripada pembolehubah tempatan dengan nama yang sama.
Sebagai contoh, kod diubah suai berikut menggunakan awalan "_m" untuk pembolehubah ahli:
<code class="c++">void Measure::get() { // ... cout << "Insert temperature:" << endl; cin >> m_T; // ... }</code>
Tambahan Pertimbangan
Atas ialah kandungan terperinci ## Bagaimanakah Pembayangan boleh Mempengaruhi Akses Pembolehubah dalam Kelas dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!