Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk membebankan

Bagaimana untuk membebankan

Linda Hamilton
Linda Hamiltonasal
2024-12-08 05:54:10169semak imbas

How to Overload the

Operator Lebih Muatan<< untuk Mengendalikan std::endl

Apabila melebihkan operator sisipan strim (operator<<), isu biasa timbul apabila cuba memasukkan std::endl sebagai hujah sisipan. Ralat "ralat C2678: binari '<<' : no operator found" menunjukkan ketidakupayaan sistem untuk mencari operator yang serasi untuk operan kiri, UIStream.

Sebab asas ralat ini ialah std::endl bukan jenis, tetapi fungsi. Untuk mengatasinya, kita mesti memahami cara std::cout mengendalikan std::endl. std::cout melaksanakan operator<< untuk mengambil penunjuk fungsi dengan tandatangan yang sama seperti std::endl. Ia kemudian memanggil fungsi dan memajukan nilai pulangan.

Untuk meniru tingkah laku ini, kami mentakrifkan operator tambahan<< fungsi dalam kelas MyStream kami yang mengambil fungsi dengan tandatangan MyStreamManipulator tersuai. Fungsi ini memanggil fungsi yang ditentukan dan mengembalikan nilai pulangannya.

Untuk mengendalikan std::endl secara khusus, kami mentakrifkan fungsi MyStream::endl statik yang sepadan dengan tandatangan MyStreamManipulator. Dalam fungsi ini, kami mencetak baris baharu dan melakukan sebarang operasi strim tambahan, seperti mengepam penimbal.

Selain itu, kami mentakrifkan operator<< fungsi untuk menerima tandatangan fungsi StandardEndLine yang digunakan oleh std::cout. Fungsi ini memanggil fungsi manip dengan std::cout sebagai hujahnya, membenarkan pemasukan std::endl.

Dengan mengikuti langkah-langkah ini, kami boleh membebankan operator<< dalam kelas MyStream tersuai kami untuk mengendalikan kedua-dua data yang ditentukan pengguna dan sisipan std::endl. Ini membolehkan kami menggunakan MyStream sebagai alternatif serba boleh kepada std::cout dengan kawalan penuh ke atas manipulasi strim.

Atas ialah kandungan terperinci Bagaimana untuk membebankan. 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