Apakah kelebihan dan kekurangan menggunakan fungsi rakan?

王林
Lepaskan: 2024-04-16 17:45:01
asal
350 orang telah melayarinya

Fungsi rakan membenarkan fungsi luaran mengakses ahli kelas peribadi atau dilindungi, yang digunakan untuk kerjasama antara kelas, meningkatkan fleksibiliti kod dan merangkum butiran pelaksanaan. Kelemahannya ialah ia memusnahkan enkapsulasi, meningkatkan gandingan dan mempunyai masalah keselamatan. Contoh praktikal: Kelas Counter bekerjasama dengan menggunakan fungsi rakan Stats untuk mengakses kaedah increment() dilindunginya.

Apakah kelebihan dan kekurangan menggunakan fungsi rakan?

Fungsi rakan: kelebihan, keburukan dan kes praktikal

Fungsi rakan ialah fungsi khas yang membolehkan fungsi luaran mengakses ahli peribadi atau dilindungi kelas. Ia sering digunakan untuk menyokong kerjasama antara kelas dan kelas atau fungsi lain.

Kelebihan

  • Dayakan kerjasama antara kelas: Fungsi rakan boleh merapatkan jurang antara kelas yang berbeza, membolehkan mereka mengakses ahli peribadi atau dilindungi masing-masing.
  • Tingkatkan fleksibiliti kod: Fungsi rakan boleh meningkatkan fleksibiliti kod dan memudahkan pemfaktoran semula dengan membenarkan fungsi luaran mengakses ahli kelas.
  • Enkapsulasi butiran pelaksanaan: Fungsi rakan juga boleh merangkum butiran pelaksanaan kelas tertentu supaya kelas lain tidak perlu memahami kerja dalamannya.

Kelemahan

  • Memusnahkan enkapsulasi: Fungsi rakan boleh memusnahkan enkapsulasi kelas kerana ia membenarkan fungsi luaran mengakses ahli yang tersembunyi.
  • Masalah gandingan: Fungsi rakan akan meningkatkan gandingan antara kelas, kerana perubahan dalam satu kelas boleh menjejaskan fungsi rakan kelas lain.
  • Isu keselamatan: Kod hasad boleh menyalahgunakan fungsi rakan untuk memintas langkah keselamatan kelas.

Kes praktikal

Mari kita ambil kelas Counter ringkas sebagai contoh, yang digunakan untuk mengira objek: Counter 类为例,它用于计数对象:

class Counter {
    private:
        int count;
    protected:
        void increment() { count++; }
};
Salin selepas log masuk

为了让另一个类 Stats 访问 Counter 的受保护成员 increment(),我们可以将它声明为 Counter

class Stats {
    public:
        void analyze(Counter& counter) {
            // Friend function can access protected method
            counter.increment();
        }
};
Salin selepas log masuk

Untuk membenarkan kelas lain Stats mengakses Ahli yang dilindungi <code>increment() >Counter, kami boleh mengisytiharkannya sebagai fungsi rakan kelas Counter:

int main() {
    Counter counter;
    Stats stats;

    stats.analyze(counter);  // 友元函数被调用

    return 0;
}
Salin selepas log masuk
Dalam fungsi utama , kita Anda boleh lihat bagaimana fungsi rakan bekerjasama: 🎜rrreee

Atas ialah kandungan terperinci Apakah kelebihan dan kekurangan menggunakan fungsi rakan?. 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