Rumah > pembangunan bahagian belakang > C++ > Fungsi Rakan atau Ahli: Bila Harus `operator

Fungsi Rakan atau Ahli: Bila Harus `operator

DDD
Lepaskan: 2024-12-08 04:45:11
asal
1111 orang telah melayarinya

Friend or Member Function: When Should `operator

Bila Melaksanakan Operator<< sebagai Rakan atau Fungsi Ahli

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?

Fungsi Ahli vs. Fungsi Rakan

Fungsi Ahli

ostream& operator<<(ostream &os, const obj& rhs);
Salin selepas log masuk

Kelebihan:

  • Akses terus ke peribadi kelas ahli
  • Enkapsulasi logik penstriman dalam kelas

Fungsi Rakan

friend ostream &operator<<(ostream &os, const obj& rhs);
Salin selepas log masuk

Kelebihan:

  • Boleh digunakan oleh pelbagai kelas
  • Boleh memudahkan penukaran jenis automatik untuk kedua-duanya operan

Rasional untuk Keputusan

Operator Kesaksamaan

Untuk pengendali kesaksamaan (cth., ==, !=), fungsi ahli diutamakan kerana:

  • Mereka mempunyai akses terus kepada data peribadi kelas.
  • Mereka menguatkuasakan perwakilan dalaman kelas untuk perbandingan kesaksamaan.

Operator Strim

Untuk pengendali strim (<<, >>), fungsi rakan diperlukan:

  • Mereka beroperasi pada objek daripada jenis yang berbeza (cth., ostream dan adat kelas).
  • Mereka mengembalikan rujukan kepada objek strim untuk operasi berantai.

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();
}
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan