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

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