Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah Panggilan Fungsi Maya Mewarisi Argumen Lalai daripada Kelas Asas Daripada Kelas Terbitan?

Mengapakah Panggilan Fungsi Maya Mewarisi Argumen Lalai daripada Kelas Asas Daripada Kelas Terbitan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-09 11:46:02453semak imbas

Why Does a Virtual Function Call Inherit Default Arguments from the Base Class Instead of the Derived Class?

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!

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