Rumah >pembangunan bahagian belakang >C++ >Mengapakah Operator Tugasan Maya Diperlukan dalam C dan Bolehkah Operator Lain Dijadikan Maya?
Operator Tugasan Maya dalam C
Operator tugasan dalam C boleh diisytiharkan maya, tetapi persoalan asas timbul: mengapa ini perlu? Dan bolehkah pengendali lain dijadikan maya juga?
Adakah Operator Tugasan Wajib Menjadi Maya?
Bertentangan dengan kepercayaan popular, pengendali tugasan tidak semestinya diperlukan untuk menjadi maya.
Memahami Fungsi dan Parameter Maya Warisan
Fungsi maya mendayakan polimorfisme, membenarkan kelas terbitan mengatasi fungsi kelas asas. Walau bagaimanapun, adalah penting untuk memahami bahawa fungsi maya tidak menyedari pewarisan parameter.
Contoh Menunjukkan Had Pewarisan Parameter:
Pertimbangkan contoh berikut dengan kelas B dan D, di mana B mempunyai pengendali tugasan maya dan D mengatasi ia:
class B { public: virtual B& operator=(const B& right) { x = right.x; return *this; } int x; }; class D : public B { public: virtual D& operator=(const D& right) { x = right.x; y = right.y; return *this; } int y; };
Dalam senario ini, walaupun penetapan maya B::operator=, panggilan tidak dianggap sebagai fungsi maya dalam D kerana parameter dan nilai pulangan berbeza.
Operator Terlebih Beban dengan Nilai Lalai Menggunakan Maya
Walaupun operator penugasan tidak secara semula jadi maya, ia boleh memberi manfaat untuk mentakrifkan fungsi maya yang merangkumi nilai lalai untuk kelas terbitan.
class D : public B { public: virtual D& operator=(const D& right) { x = right.x; y = right.y; return *this; } virtual B& operator=(const B& right) { x = right.x; y = 13; // Default value return *this; } int y; };
Pendekatan ini membolehkan anda menetapkan nilai lalai kepada objek D apabila diberikan kepada rujukan B.
Menggunakan RTTI untuk Jenis Komprehensif Mengendalikan
Akhir sekali, anda boleh menggunakan Run-Time Type Information (RTTI) untuk mengendalikan fungsi maya yang melibatkan jenis anda dengan berkesan.
virtual B& operator=(const B& right) { const D *pD = dynamic_cast<const D*>(&right); if (pD) { x = pD->x; y = pD->y; } else { x = right.x; y = 13; // Default value } return *this; }
Dengan menggabungkan teknik ini, anda boleh secara menyeluruh mengendalikan operasi tugasan yang melibatkan pewarisan dan memastikan tingkah laku yang betul untuk jenis terbitan.
Atas ialah kandungan terperinci Mengapakah Operator Tugasan Maya Diperlukan dalam C dan Bolehkah Operator Lain Dijadikan Maya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!