Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Tidak Boleh Buat `pengendali
Melaksanakan operator maya<<
Keperluan untuk operator maya<< timbul apabila menyesuaikan tingkah laku operator penstriman untuk kelas yang berbeza. Percubaan untuk mentakrifkan operator sebagai maya selalunya membawa kepada ralat "operator <<: hanya fungsi dan pangkalan ahli boleh menjadi maya."
Dilema Fungsi Percuma
Isu timbul kerana pengendali<< biasanya ditakrifkan sebagai fungsi bebas, yang tidak mempunyai objek penerima dan tidak boleh maya. Mentakrifkan operator sebagai fungsi ahli, sebaliknya, membalikkan susunan parameter, menyebabkan ralat penyusunan.
Penyelesaian melalui Arahan
Untuk menyelesaikan dilema ini, pertimbangkan untuk menambah fungsi ahli maya yang merangkumi gelagat output yang diingini:
<code class="cpp">class MyClass { public: virtual void print(ostream& out) const; // Virtual output function };</code>
Operator Tersuai dengan Gelagat Maya
Dengan fungsi ahli maya tersedia, anda boleh menentukan pengendali<< sebagai fungsi percuma yang mewakilkan kepada fungsi cetakan:
<code class="cpp">ostream& operator<<(ostream& out, const MyClass& mc) { mc.print(out); // Calls the virtual print function return out; }</code>
Pendekatan ini mengekalkan susunan parameter yang betul untuk operator<< fungsi bebas sambil membenarkan penyesuaian tingkah laku output melalui fungsi ahli maya. Subkelas boleh mengatasi fungsi cetakan untuk melaksanakan pemformatan output tersuai mereka sendiri.
Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Buat `pengendali. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!