Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah pembolehubah statik dalam fungsi ahli berkelakuan merentas keadaan kelas yang berbeza?

Bagaimanakah pembolehubah statik dalam fungsi ahli berkelakuan merentas keadaan kelas yang berbeza?

Susan Sarandon
Susan Sarandonasal
2024-11-09 09:06:01825semak imbas

How do static variables in member functions behave across different instances of a class?

Pembolehubah Statik dalam Fungsi Ahli

Pertimbangkan kelas berikut:

class A {
   void foo() {
      static int i;
      i++;
   }
};

Apabila berurusan dengan pembolehubah statik dalam fungsi ahli dalam C , ia adalah penting untuk memahami cara mereka berkelakuan merentas kejadian.

Berbilang Instans dan Pembolehubah Statik

Bertentangan dengan andaian bahawa setiap kejadian akan memiliki salinan pembolehubah statiknya sendiri, dalam senario khusus ini, hanya akan terdapat satu salinan int i statik dalam keseluruhan program. Ini kerana kelas A ialah kelas bukan templat dan A::foo() ialah fungsi bukan templat.

Kesan Contoh pada Pembolehubah Statik

Tidak kira yang mana contoh A menggunakan kaedah foo(), pembolehubah statik yang dikongsi i akan terjejas. Sebagai contoh, jika anda mengisytiharkan berbilang kejadian A seperti ini:

A o1, o2, o3;

Memanggil foo() pada mana-mana kejadian ini akan meningkatkan pembolehubah i:

o1.foo(); // i = 1
o2.foo(); // i = 2
o3.foo(); // i = 3
o1.foo(); // i = 4

Sebagai kesimpulan, statik pembolehubah dalam fungsi ahli dikongsi merentas semua kejadian kelas, membenarkan mana-mana tika mengakses dan mengubah suai nilai yang sama.

Atas ialah kandungan terperinci Bagaimanakah pembolehubah statik dalam fungsi ahli berkelakuan merentas keadaan kelas yang berbeza?. 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