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
Lepaskan: 2024-11-23 09:58:09
asal
326 orang telah melayarinya

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);
};
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan