Pengenalan:
Lebihan beban operator membolehkan kami melanjutkan operator seperti << untuk bekerja dengan kelas tersuai. Persoalannya timbul: adakah pengendali<< dilaksanakan sebagai fungsi rakan atau fungsi ahli dalam kelas?
ostream& operator<<(ostream &os, const obj& rhs);
Kelebihan:
friend ostream &operator<<(ostream &os, const obj& rhs);
Kelebihan:
Untuk pengendali kesaksamaan (cth., ==, !=), fungsi ahli diutamakan kerana:
Untuk pengendali strim (<<, >>), fungsi rakan diperlukan:
Contoh:
Pertimbangkan kelas Perenggan dengan ahli rentetan m_para peribadi. Kami mahu melaksanakan pengendali<< untuk mencetak teks perenggan:
class Paragraph { public: Paragraph(const string& init) : m_para(init) {} const string& to_str() const { return m_para; } bool operator==(const Paragraph& rhs) const { return m_para == rhs.m_para; } friend ostream &operator<<(ostream &os, const Paragraph& p); private: string m_para; }; ostream &operator<<(ostream &os, const Paragraph& p) { return os << p.to_str(); }
Dalam contoh ini, operator<< dilaksanakan sebagai fungsi rakan kerana ia beroperasi pada jenis yang berbeza dan mengembalikan rujukan strim. Kaedah to_str() digunakan untuk mengakses ahli m_para peribadi dan menukarnya kepada rentetan untuk output.
Atas ialah kandungan terperinci Fungsi Rakan atau Ahli: Bila Harus `operator. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!