Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Anda Membuat `

Bolehkah Anda Membuat `

Linda Hamilton
Linda Hamiltonasal
2024-10-27 05:39:02291semak imbas

 Can You Make the `

Pemuatan Terlebih Operator Maya: Membuat << Maya

Percubaan untuk mengisytiharkan << operator mengakibatkan ralat pengkompil kerana sifat fungsi bebas. Untuk mengatasi pengehadan ini dan membolehkan tingkah laku maya untuk beban operator tersuai, pendekatan alternatif diperlukan.

Mentransformasikan Operator kepada Fungsi Ahli

Kunci untuk memperkenalkan tingkah laku maya terletak pada menukar << operator daripada fungsi bebas kepada fungsi ahli kelas. Walau bagaimanapun, berbuat demikian secara langsung akan membalikkan tertib parameter, mengakibatkan peletakan operan yang salah.

Memperkenalkan Indirection: The Print() Function

Untuk menyelesaikan isu ini, Fundamental Teorem Kejuruteraan Perisian mencadangkan penambahan lapisan perantaraan amaran. Daripada membuat << maya, fungsi print() maya ditambahkan pada kelas:

<code class="cpp">class MyClass {
public:
    virtual void print(ostream& where) const;
};</code>

Mengubah hala << untuk mencetak()

<< fungsi percuma kemudiannya ditakrifkan semula untuk mewakilkan gelagatnya untuk mencetak():

<code class="cpp">ostream& operator<<(ostream& out, const MyClass& mc) {
    mc.print(out);
    return out;
}</code>

Mencapai Gelagat Maya

Dengan persediaan ini, << operator mengekalkan susunan parameter yang betul sambil membenarkan subkelas mengatasi kaedah print() dan menyesuaikan tingkah laku keluarannya. Ini secara berkesan membolehkan tingkah laku maya untuk << operator, membenarkan polimorfisme dinamik dalam penstriman output.

Atas ialah kandungan terperinci Bolehkah Anda Membuat `. 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