Dalam C , kaedah ahli statik biasanya dipanggil menggunakan nama kelas itu sendiri, bukannya contoh kelas. Walau bagaimanapun, timbul persoalan: bolehkah kaedah ahli statik digunakan pada kejadian kelas?
Coretan kod yang diberikan menunjukkan tingkah laku yang menarik:
class Test { public: static void DoCrash(){ std::cout << "TEST IT!" << std::endl; } }; int main() { Test k; k.DoCrash(); // calling a static method like a member method... }
Pada Visual Studio 2008 SP1, kod ini berjaya menyusun dan mengeluarkan "TEST IT!". Bertentangan dengan jangkaan biasa, kaedah statik nampaknya digunakan pada contoh kelas.
1. Adakah Anda Salah? Adakah Kod Betul?
Berdasarkan piawaian C, memanggil kaedah ahli statik pada tika adalah tidak betul. Standard secara eksplisit menyatakan dalam 9.4 (Static Members):
"Ahli statik kelas X boleh dirujuk menggunakan ungkapan qualified-id X::s; ia tidak perlu menggunakan sintaks akses ahli kelas (5.2.5) untuk merujuk kepada ahli statik."
Dalam erti kata lain, ia bukan satu keperluan untuk menggunakan nama kelas untuk mengakses ahli statik. Sintaks akses ahli kelas dibenarkan, tetapi ungkapan objek dinilai dalam kes itu.
2. Mengapa Ini Dibenarkan?
Standard membenarkan ahli statik digunakan pada kejadian untuk memudahkan penggunaan kaedah "statik atau tidak" dalam templat. Templat selalunya memerlukan keupayaan untuk memanggil fungsi tanpa mengetahui sama ada ia statik atau tidak. Dengan membenarkan seruan ahli statik pada kejadian, pengkompil sentiasa boleh menentukan fungsi yang betul untuk dipanggil, tanpa mengira status statiknya.
Atas ialah kandungan terperinci Bolehkah Anda Memanggil Kaedah Ahli Statik pada Contoh Kelas dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!