Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Anda Boleh Melaksanakan `operator

Bagaimana Anda Boleh Melaksanakan `operator

Barbara Streisand
Barbara Streisandasal
2024-10-26 06:57:03540semak imbas

How Can You Implement a Virtual `operator

Mengatasi Operator Maya<< Teka-teki

Dalam percubaan untuk melaksanakan << operator, kod berikut mengakibatkan ralat pengkompil:

<code class="cpp">virtual friend ostream &amp; operator<<(ostream&amp; os,const Advertising&amp; 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&amp; where) const;
};</code>

Kemudian, takrif semula operator<< sebagai fungsi percuma, memanfaatkan fungsi maya baharu:

<code class="cpp">ostream&amp; operator<< (ostream&amp; out, const MyClass&amp; 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!

Kenyataan:
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