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
1056 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!

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