Gelagat Argumen Lalai Tidak Dijangka dalam Fungsi Maya: Memahami Punca Punca
Dalam coretan kod ini, anda menghadapi isu yang menarik berkaitan dengan lalai hujah fungsi maya. Walaupun menjangkakan outputnya ialah "D--data=20", anda sebaliknya memerhatikan "D--data=10". Mari kita mendalami mekanisme dalaman untuk memahami punca utama.
Dalam contoh anda, anda mempunyai dua kelas, B dan D, dengan fungsi maya bernama cetakan yang mengambil hujah lalai. Dalam kelas D, anda mengatasi fungsi cetakan dan memberikan hujah lalai yang berbeza. Apabila anda mencipta contoh D, anda mengakses fungsi cetakan melalui penuding kepada B.
Menurut piawaian C (8.3.6.10), "Panggilan fungsi maya menggunakan argumen lalai dalam pengisytiharan fungsi maya ditentukan oleh jenis statik penuding atau rujukan yang menandakan objek." Ini menunjukkan bahawa apabila memanggil fungsi maya melalui penuding ke kelas asas, ia menggunakan argumen lalai yang ditakrifkan dalam pengisytiharan kelas asas, tanpa mengira argumen lalai yang ditindih dalam kelas terbitan.
Oleh itu, apabila anda memanggil cetak melalui penunjuk bp, argumen lalai ditentukan oleh jenis statik bp, iaitu B. Akibatnya, argumen lalai B::print digunakan, menghasilkan output "D--data=10" dan bukannya "D--data=20" yang dijangkakan.
Atas ialah kandungan terperinci Mengapakah Argumen Lalai Fungsi Maya Menggunakan Nilai Kelas Asas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!