Bolehkah Anda Membuat `

Linda Hamilton
Lepaskan: 2024-10-27 05:39:02
asal
289 orang telah melayarinya

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

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

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!