Rumah > pembangunan bahagian belakang > C++ > Sekiranya Pengendali Tugasan C Menjadi Maya?

Sekiranya Pengendali Tugasan C Menjadi Maya?

Patricia Arquette
Lepaskan: 2024-12-04 14:02:11
asal
351 orang telah melayarinya

Should C   Assignment Operators Be Virtual?

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

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!

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