Rumah >pembangunan bahagian belakang >C++ >## Bagaimanakah Pembayangan boleh Mempengaruhi Akses Pembolehubah dalam Kelas dalam C?

## Bagaimanakah Pembayangan boleh Mempengaruhi Akses Pembolehubah dalam Kelas dalam C?

DDD
DDDasal
2024-10-29 07:32:30569semak imbas

## How can Shadowing Affect Variable Access within a Class in 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

  • Adalah amalan yang baik untuk menggunakan rujukan tetap (const std::string&) untuk mengembalikan nilai kaedah pengakses untuk mengelakkan pengubahsuaian yang tidak diingini.
  • Menggunakan sintaks fungsi ahli bukannya akses pembolehubah langsung (cth., m_nomefile berbanding nomefile()) diutamakan untuk kejelasan dan kebolehbacaan.
  • Menggunakan pengakses membantu memastikan kod diselenggara dan mengurangkan peluang mengubah suai pembolehubah ahli secara tidak sengaja.

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!

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