Rumah > pembangunan bahagian belakang > C++ > Bagaimana Anda Boleh Melaksanakan `operator

Bagaimana Anda Boleh Melaksanakan `operator

Barbara Streisand
Lepaskan: 2024-10-26 06:57:03
asal
632 orang telah melayarinya

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

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

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

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

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!

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