Mengatasi Operator Maya<< Teka-teki
Dalam percubaan untuk melaksanakan << operator, kod berikut mengakibatkan ralat pengkompil:
<code class="cpp">virtual friend ostream & operator<<(ostream& os,const Advertising& add);</code>
Akar Isu
Operator yang ditakrifkan<< ialah fungsi percuma, melumpuhkan kelayakannya sebagai maya kerana ketiadaan objek penerima. Untuk mencapai kefungsian maya yang diingini, pengendali perlu ditakrifkan sebagai ahli kelas.
Masalah dengan Definisi Terus
Mentakrifkan operator<< sebagai ahli kelas menimbulkan isu yang berbeza. Operan akan diterbalikkan, menyebabkan komplikasi apabila cuba mengeluarkan objek:
<code class="cpp">MyClass myObject; myObject << cout; // Legal but not our intended usage</code>
Penyelesaian: Pendekatan Tidak Langsung
Untuk menavigasi cabaran ini, perkenalkan maya tambahan fungsi:
<code class="cpp">class MyClass { public: virtual void print(ostream& where) const; };</code>
Kemudian, takrif semula operator<< sebagai fungsi percuma, memanfaatkan fungsi maya baharu:
<code class="cpp">ostream& operator<< (ostream& out, const MyClass& mc) { mc.print(out); return out; }</code>
Persediaan ini membolehkan pengendali<< fungsi percuma untuk mengekalkan susunan parameter yang betul sambil mendayakan penyesuaian gelagat output dalam subkelas melalui fungsi print().
Atas ialah kandungan terperinci Bagaimana Anda Boleh Melaksanakan `operator. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!