Pengendali<< dalam C : Fungsi Rakan lwn. Fungsi Ahli
Dalam C , pengendali<< boleh ditakrifkan sama ada sebagai fungsi rakan atau sebagai fungsi ahli. Artikel ini meneroka rasional di sebalik memilih satu daripada yang lain dalam senario tertentu.
Pendekatan Fungsi Rakan untuk Operator<<
Apabila mentakrifkan operator<< sebagai fungsi rakan, sintaks biasanya melibatkan perkara berikut:
friend bool operator<<(obj const& lhs, obj const& rhs);
Pendekatan ini disyorkan apabila perbandingan perhubungan melibatkan pemeriksaan ahli persendirian kelas. Memandangkan fungsi rakan mempunyai akses kepada ahli persendirian kelas, mereka boleh melakukan perbandingan secara langsung.
Pendekatan Fungsi Ahli untuk Operator<<
Dalam pendekatan ini, pengendali<< ditakrifkan sebagai fungsi ahli kelas:
ostream& operator<<(obj const& rhs);
Pendekatan ini sesuai apabila perbandingan melibatkan data yang boleh diakses secara umum atau operasi mudah. Walau bagaimanapun, ia mempunyai had utama: jika perbandingan memerlukan akses kepada ahli persendirian, pendekatan fungsi ahli tidak boleh digunakan.
Perbandingan Pendekatan
Penstriman Operasi:
Apabila mentakrifkan operator<< untuk operasi penstriman, kedua-dua fungsi rakan dan fungsi ahli boleh digunakan. Walau bagaimanapun, fungsi rakan mesti digunakan jika operasi penstriman perlu mengubah suai objek strim (cth., menambah pemisah baris).
Operator Kesaksamaan dan Perhubungan:
Untuk operator seperti = =, !=, <, >, dan seterusnya, lebih disukai untuk mentakrifkannya sebagai fungsi ahli. Pendekatan ini membolehkan perbandingan mudah ahli persendirian dalam kelas. Selain itu, ia memudahkan kod dengan mengelakkan keperluan untuk fungsi rakan tambahan.
Contoh
Pertimbangkan contoh kelas Perenggan dengan kaedah to_str() berikut:
class Paragraph { public: Paragraph(std::string const& init) : m_para(init) {} std::string const& to_str() const { return m_para; } };
Fungsi Rakan Pendekatan:
friend ostream & operator<<(ostream &os, const Paragraph& p) { return os << p.to_str(); }
Pendekatan Fungsi Ahli:
ostream & operator<<(ostream &os) { return os << paragraph; }
Dalam kes ini, pendekatan fungsi rakan lebih diutamakan kerana ia membenarkan akses kepada peribadi ahli m_para untuk operasi penstriman.
Atas ialah kandungan terperinci Fungsi Rakan vs. Fungsi Ahli untuk Operator. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!