Rumah >pembangunan bahagian belakang >C++ >Sekiranya `pengendali

Sekiranya `pengendali

DDD
DDDasal
2024-12-17 21:42:22625semak imbas

Should `operator

"Operator<<: Fungsi Rakan atau Ahli? Mengambil kira Jenis Operasi"

Pemilihan antara operator pelaksana<< sebagai rakan atau fungsi ahli bergantung pada jenis operasi yang dijalankan.

Untuk pengendali perbandingan (==, !=, dsb.), anda dinasihatkan untuk menganggapnya sebagai fungsi ahli dalam kelas. Memandangkan kelas itu sememangnya rakan sendiri, kelas itu boleh mengakses dan membandingkan ahli peribadi kejadiannya dengan mudah. Selain itu, mendayakan penukaran automatik untuk satu operan melalui fungsi berdiri bebas mungkin membawa kepada akibat yang tidak diingini; oleh itu, keutamaan untuk fungsi ahli.

Sebaliknya, apabila berurusan dengan pengendali aliran (<<, >>), mereka menuntut fungsi luaran kerana ia memerlukan akses kepada objek aliran di luar kawalan kelas. Fungsi ini boleh menjadi sama ada rakan kelas atau menggunakan kaedah awam yang mengendalikan penstriman.

Sudah menjadi kebiasaan bagi pengendali strim untuk mengembalikan rujukan kepada objek strim, membolehkan rantaian operasi yang lancar. Berikut ialah contoh yang menunjukkan pendekatan ini:

#include <iostream>

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

    std::string const& to_str() const
    {
        return m_para;
    }

    bool operator==(Paragraph const& rhs) const
    {
        return m_para == rhs.m_para;
    }
    bool operator!=(Paragraph const& rhs) const
    {
        return !(this->operator==(rhs));
    }
    bool operator<(Paragraph const& rhs) const
    {
        return m_para < rhs.m_para;
    }

private:
    friend std::ostream & operator<<(std::ostream &os, const Paragraph& p);
    std::string m_para;
};

std::ostream & operator<<(std::ostream &os, const Paragraph& p)
{
    return os << p.to_str();
}

int main()
{
    Paragraph p("Plop");
    Paragraph q(p);

    std::cout << p << std::endl << (p == q) << std::endl;
}

Dengan memahami sifat setiap operasi dan mematuhi pilihan pelaksanaan yang sesuai, anda boleh memanfaatkan operator dengan berkesan<< untuk memanipulasi objek seperti yang dikehendaki.

Atas ialah kandungan terperinci Sekiranya `pengendali. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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