Rumah > pembangunan bahagian belakang > C++ > Fungsi Rakan lwn. Fungsi Ahli untuk Lebihan Muatan Operator: Bilakah Fungsi Rakan Diutamakan untuk `

Fungsi Rakan lwn. Fungsi Ahli untuk Lebihan Muatan Operator: Bilakah Fungsi Rakan Diutamakan untuk `

DDD
Lepaskan: 2025-01-03 04:14:39
asal
819 orang telah melayarinya

Friend Function vs. Member Function for Operator Overloading: When is a Friend Function Preferred for `

Operator Overloading: Friend Function vs. Member Function untuk "<<"

Dalam C , pengendali terlebih beban boleh dilaksanakan sama ada sebagai fungsi rakan atau fungsi ahli. Apabila ia berkaitan dengan pengendali sisipan strim "<<," pertimbangan tertentu membimbing pilihan antara pendekatan ini.

Menggunakan Fungsi Rakan

friend ostream & operator<<(ostream & os, const Paragraph& p) {
    return os << p.to_str();
}
Salin selepas log masuk

Pendekatan ini biasanya digunakan untuk strim operator kerana:

  • Ia membenarkan akses kepada objek strim (os), yang diperlukan untuk melaksanakan strim sisipan.
  • Ia mengikut konvensyen pengendali strim yang mengembalikan rujukan strim untuk tujuan rantaian.

Menggunakan Fungsi Ahli

ostream & operator<<(Paragraph const& rhs);
Salin selepas log masuk

Walaupun ia menarik untuk berfikir bahawa fungsi ahli harus digunakan untuk semua kaedah kelas, pendekatan ini tidak disyorkan untuk "<<" operator atas beberapa sebab:

  • Anda tidak boleh mengakses objek strim (os) daripada fungsi ahli.
  • Anda perlu memanggil kaedah "to_str" secara manual dalam fungsi ahli, yang berlebihan dan mudah ralat.
  • Adalah tidak konvensional untuk pengendali aliran menjadi ahli fungsi.

Contoh

Pertimbangkan kelas berikut:

class Paragraph {
    std::string m_para;

public:
    Paragraph(std::string const& init) : m_para(init) {}

    std::string const& to_str() const { return m_para; }
};
Salin selepas log masuk

Rasional

Dalam kes ini, menggunakan fungsi rakan untuk " <<" operator ialah pilihan pilihan kerana:

  • Ia menyediakan akses kepada objek strim (os) untuk penstriman.
  • Ia mengikut konvensyen pengendali strim yang mengembalikan rujukan strim.
  • Ia mengurangkan pertindihan kod dan kemungkinan ralat berbanding menggunakan fungsi ahli.

Atas ialah kandungan terperinci Fungsi Rakan lwn. Fungsi Ahli untuk Lebihan Muatan Operator: Bilakah Fungsi Rakan Diutamakan untuk `. 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