Fungsi Maya dengan Parameter Lalai
Fungsi maya biasanya digunakan dalam pengaturcaraan berorientasikan objek untuk polimorfisme. Mereka boleh mempunyai nilai parameter lalai dan persoalan timbul sama ada kelas terbitan mewarisi lalai ini atau menentukan sendiri.
Adakah Kelas Terbitan Mewarisi Nilai Lalai?
Mengikut C Standard, kelas terbitan tidak mewarisi nilai lalai fungsi maya daripada pangkalan kelas.
Lalai Mana Yang Digunakan?
Nilai lalai yang digunakan dalam panggilan fungsi maya bergantung pada jenis statik objek yang dipanggil. Jika anda memanggil fungsi maya melalui objek atau rujukan kelas asas, nilai lalai daripada kelas asas akan digunakan. Walau bagaimanapun, jika anda memanggil melalui objek atau rujukan kelas terbitan, nilai lalai daripada kelas terbitan akan digunakan.
Gelagat Pengkompil dan Amalan Disyorkan
Penyusun yang berbeza mungkin mengendalikan lalai fungsi maya secara berbeza. Walau bagaimanapun, Piawaian C menetapkan bahawa nilai lalai tidak diwarisi dan harus dinyatakan secara eksplisit dalam kelas terbitan.
Contoh
Pertimbangkan contoh berikut:
struct Base { virtual void f(int a = 7); }; struct Derived : public Base { void f(int a); };
Dalam contoh ini, fungsi f dalam kelas Derived tidak mewarisi nilai lalai 7 daripada kelas asas. Apabila memanggil f melalui objek kelas Terbitan, panggilan harus menentukan hujah secara eksplisit, seperti yang ditunjukkan di bawah:
Derived d; d.f(10); // Call `Derived::f(int a)` with a = 10
Kesimpulan
Walaupun fungsi maya boleh mempunyai parameter lalai , lalai ini tidak diwarisi oleh kelas terbitan. Nilai lalai yang digunakan bergantung pada jenis statik objek yang dipanggil. Mengikuti pengesyoran Standard C dan menyatakan nilai lalai secara eksplisit dalam kelas terbitan dianggap amalan terbaik.
Atas ialah kandungan terperinci Adakah Kelas Terbitan Mewarisi Parameter Lalai dalam Fungsi Maya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!