Gelagat Argumen Lalai Fungsi Maya: Satu Teka-teki yang Tidak Diduga
Dalam coretan kod ini, dilema timbul berkenaan kelakuan argumen lalai fungsi maya:
class B { public: B(); virtual void print(int data = 10) { cout << endl << "B--data=" << data; } }; class D : public B { public: D(); void print(int data = 20) { cout << endl << "D--data=" << data; } }; int main() { B* bp = new D(); bp->print(); return 0; }
Output Jangkaan:
[ D--data=20 ]
Output Sebenar:
[ D--data=10 ]
Memahami Gelagat:
Piawaian C menetapkan dalam bahagian 8.3.6.10 bahawa argumen lalai panggilan fungsi maya ditentukan oleh jenis statik penuding atau rujukan yang menandakan objek. Dalam contoh ini, memandangkan fungsi cetakan digunakan melalui penunjuk jenis B (bp), argumen lalai B::print digunakan, menghasilkan output yang tidak dijangka.
Kesimpulan:
Apabila menggunakan fungsi maya melalui penunjuk atau rujukan, tingkah laku hujah lalai mesti dipertimbangkan dengan teliti. Jenis statik penuding atau rujukan menentukan argumen lalai yang digunakan, yang boleh membawa kepada hasil yang tidak dijangka jika tidak difahami dengan betul.
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!