Rumah > pembangunan bahagian belakang > C++ > Mengapa Fungsi Maya Berkelakuan Tidak Dijangka Semasa Permulaan Objek C?

Mengapa Fungsi Maya Berkelakuan Tidak Dijangka Semasa Permulaan Objek C?

Linda Hamilton
Lepaskan: 2024-12-11 13:22:16
asal
831 orang telah melayarinya

Why Do Virtual Functions Behave Unexpectedly During C   Object Initialization?

Memahami Warisan dan Permulaan Objek dalam C untuk Akses Fungsi Maya

Dalam C , warisan membolehkan penciptaan kelas terbitan yang mewarisi sifat dan tingkah laku daripada kelas asas. Walau bagaimanapun, susunan permulaan objek dalam C boleh memberi kesan bagaimana fungsi maya berkelakuan.

Soalan:

Apabila objek dibina dalam C dengan kelas asas yang mempunyai maya fungsi, mengapa fungsi itu berkelakuan tanpa diduga?

Jawapan:

Konsep utama di sini ialah susunan permulaan untuk kelas asas dan terbitan. Dalam C , kelas asas dibina sebelum kelas terbitan.

Penjelasan:

Dalam contoh yang disediakan:

  • Kelas asas mentakrifkan nilai fungsi maya() yang mengembalikan 0 secara lalai.
  • diperolehi warisan daripada asas dan mengatasi fungsi value() untuk mengembalikan 1.
  • Apabila terbitan dibuat instantiat, ia mula-mula membina bahagian asas objek.
  • Walau bagaimanapun, pada ketika ini, objek itu belum lengkap contoh terbitan, kerana pembina kelas terbitan belum dilaksanakan lagi.
  • Oleh itu, apabila pangkalan pembina memanggil value(), ia menggunakan versi asas fungsi dan bukannya versi terbitan yang diganti, menghasilkan output 0.

Untuk membetulkan tingkah laku ini:

Untuk memastikan bahawa fungsi nilai() kelas terbitan dipanggil semasa pembinaan objek, anda harus memulakan kelas asas secara eksplisit dengan alamat contoh kelas terbitan:

derived example;
base(&example).value()
Salin selepas log masuk

Dengan menghantar alamat objek terbitan, anda mengarahkan pembina asas untuk memanggil fungsi value() pada objek terbitan, dengan berkesan "mematangkan" objek ke dalam bentuk terbitan lengkapnya .

Atas ialah kandungan terperinci Mengapa Fungsi Maya Berkelakuan Tidak Dijangka Semasa Permulaan Objek C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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