Gelagat Argumen Lalai Fungsi Maya
Dalam kod C yang disediakan, situasi aneh timbul dengan lebihan muatan fungsi maya dan argumen lalai. Mari kita terokai isu tersebut dan fahami mekanisme asas.
Kod mentakrifkan dua kelas, B dan D, dengan B mempunyai kaedah cetakan maya dengan argumen lalai 10 dan D mengatasi cetakan dengan argumen lalai yang berbeza sebanyak 20 . Apabila memanggil cetakan melalui penunjuk jenis B yang menunjuk ke objek jenis D, output yang dijangkakan "D--data=20" tidak diperoleh. Sebaliknya, output memaparkan "D--data=10".
Menurut standard C (8.3.6.10), panggilan fungsi maya menggunakan argumen lalai yang ditakrifkan dalam pengisytiharan yang ditentukan oleh statik penuding atau rujukan taip. Ini menunjukkan bahawa apabila cetakan dipanggil melalui penuding B, ia mewarisi hujah lalai daripada B, walaupun ditindih dalam D.
Penjelasan terletak pada jenis statik (B) penuding, yang menentukan lalai hujah yang digunakan semasa panggilan fungsi maya. Walaupun objek yang ditunjuk adalah jenis D, jenis penuding menentukan kelakuan hujah lalai.
Oleh itu, untuk mendapatkan output yang diingini "D--data=20", penunjuk yang digunakan untuk memanggil cetakan mestilah jenis D untuk memastikan penggunaan argumen lalai yang ditindih.
Atas ialah kandungan terperinci Mengapakah Panggilan Fungsi Maya Mewarisi Argumen Lalai daripada Kelas Asas Daripada Kelas Terbitan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!