Rumah > pembangunan bahagian belakang > C++ > Fungsi Rakan vs. Fungsi Ahli untuk Operator

Fungsi Rakan vs. Fungsi Ahli untuk Operator

Mary-Kate Olsen
Lepaskan: 2024-12-14 16:07:16
asal
691 orang telah melayarinya

Friend Function vs. Member Function for Operator

Pengendali<< dalam C : Fungsi Rakan lwn. Fungsi Ahli

Dalam C , pengendali<< boleh ditakrifkan sama ada sebagai fungsi rakan atau sebagai fungsi ahli. Artikel ini meneroka rasional di sebalik memilih satu daripada yang lain dalam senario tertentu.

Pendekatan Fungsi Rakan untuk Operator<<

Apabila mentakrifkan operator<< sebagai fungsi rakan, sintaks biasanya melibatkan perkara berikut:

friend bool operator<<(obj const&amp; lhs, obj const&amp; rhs);
Salin selepas log masuk

Pendekatan ini disyorkan apabila perbandingan perhubungan melibatkan pemeriksaan ahli persendirian kelas. Memandangkan fungsi rakan mempunyai akses kepada ahli persendirian kelas, mereka boleh melakukan perbandingan secara langsung.

Pendekatan Fungsi Ahli untuk Operator<<

Dalam pendekatan ini, pengendali<< ditakrifkan sebagai fungsi ahli kelas:

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

Pendekatan ini sesuai apabila perbandingan melibatkan data yang boleh diakses secara umum atau operasi mudah. Walau bagaimanapun, ia mempunyai had utama: jika perbandingan memerlukan akses kepada ahli persendirian, pendekatan fungsi ahli tidak boleh digunakan.

Perbandingan Pendekatan

Penstriman Operasi:
Apabila mentakrifkan operator<< untuk operasi penstriman, kedua-dua fungsi rakan dan fungsi ahli boleh digunakan. Walau bagaimanapun, fungsi rakan mesti digunakan jika operasi penstriman perlu mengubah suai objek strim (cth., menambah pemisah baris).

Operator Kesaksamaan dan Perhubungan:
Untuk operator seperti = =, !=, <, >, dan seterusnya, lebih disukai untuk mentakrifkannya sebagai fungsi ahli. Pendekatan ini membolehkan perbandingan mudah ahli persendirian dalam kelas. Selain itu, ia memudahkan kod dengan mengelakkan keperluan untuk fungsi rakan tambahan.

Contoh

Pertimbangkan contoh kelas Perenggan dengan kaedah to_str() berikut:

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

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

Fungsi Rakan Pendekatan:

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

Pendekatan Fungsi Ahli:

ostream &amp; operator<<(ostream &amp;os) {
    return os << paragraph;
}
Salin selepas log masuk

Dalam kes ini, pendekatan fungsi rakan lebih diutamakan kerana ia membenarkan akses kepada peribadi ahli m_para untuk operasi penstriman.

Atas ialah kandungan terperinci Fungsi Rakan vs. Fungsi Ahli untuk 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan