Rumah > pembangunan bahagian belakang > C++ > Mengapakah Operator Tugasan Maya Diperlukan dalam C dan Bolehkah Operator Lain Dijadikan Maya?

Mengapakah Operator Tugasan Maya Diperlukan dalam C dan Bolehkah Operator Lain Dijadikan Maya?

Linda Hamilton
Lepaskan: 2024-12-21 01:08:10
asal
607 orang telah melayarinya

Why is a Virtual Assignment Operator Necessary in C   and Can Other Operators Be Made Virtual?

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

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

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

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!

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