Operator Tugasan Maya dan Keperluannya dalam C
Walaupun pengendali tugasan boleh ditakrifkan sebagai maya dalam C , ia bukan keperluan wajib. Walau bagaimanapun, pengisytiharan maya ini menimbulkan persoalan tentang keperluan untuk maya dan sama ada pengendali lain boleh dijadikan maya juga.
Kes bagi Operator Tugasan Maya
Pengendali tugasan bukan secara maya. Walau bagaimanapun, ia menjadi perlu apabila menetapkan objek kelas yang diwarisi kepada pembolehubah kelas asas. Pengikatan dinamik ini memastikan bahawa pelaksanaan yang betul bagi pengendali tugasan berdasarkan jenis dinamik objek dipanggil.
Bolehkah Operator Lain Menjadi Maya?
Ya, lain-lain pengendali yang mengambil sebagai hujah objek jenis yang ditakrifkan juga boleh dijadikan maya. Ini membenarkan pengikatan masa jalan operator ini, memastikan pelaksanaan yang betul digunakan berdasarkan jenis objek yang dinamik.
Gelagat Tidak Dijangka dengan Operator Tugasan Maya
Membuat pengendali tugasan maya boleh membawa kepada tingkah laku yang tidak dijangka. Tandatangan fungsi maya mestilah sama untuk semua penggantiannya. Oleh itu, adalah penting untuk memastikan bahawa parameter dan nilai pulangan pengendali tugasan yang diganti untuk kelas yang berbeza adalah konsisten.
Nilai Lalai dan Operator Tugasan Terlebih Beban
Nilai lalai untuk parameter dalam pengendali tugasan boleh dilaksanakan melalui fungsi maya. Ini membenarkan nilai lalai digunakan apabila objek kelas yang diwarisi diperuntukkan kepada pembolehubah jenis kelas asas.
Maklumat Jenis Waktu Jalan (RTTI)
RTTI boleh digunakan untuk mengendalikan pengendali tugasan bagi jenis yang diwarisi dengan berkesan. Dengan menggunakan dynamic_cast untuk menentukan jenis objek masuk, pelaksanaan pengendali tugasan yang betul boleh dilaksanakan.
Contoh: Menugaskan Objek D kepada Objek B
Pertimbangkan perkara berikut kod:
class B { public: virtual void operator=(const B& right) { ... } int x; }; class D : public B { public: virtual void operator=(const B& right) { ... } int y; };
Tanpa maya, memberikan objek D kepada objek B akan memanggil pengendali tugasan daripada kelas B, yang tidak akan mengendalikan ahli data tambahan dalam kelas D dengan betul. Walau bagaimanapun, dengan maya, pengendali tugasan yang betul daripada kelas D dipanggil.
Atas ialah kandungan terperinci Sekiranya Pengendali Tugasan C Menjadi Maya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!