Rumah >pembangunan bahagian belakang >C++ >Adakah Kelas Terbitan Mewarisi Parameter Lalai dalam Fungsi Maya?

Adakah Kelas Terbitan Mewarisi Parameter Lalai dalam Fungsi Maya?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-23 09:58:09331semak imbas

Do Derived Classes Inherit Default Parameters in Virtual Functions?

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!

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