Rumah > pembangunan bahagian belakang > C++ > Bagaimana Anda Boleh Mengisytiharkan Templat Kelas sebagai Rakan dalam C?

Bagaimana Anda Boleh Mengisytiharkan Templat Kelas sebagai Rakan dalam C?

Linda Hamilton
Lepaskan: 2024-11-14 13:50:02
asal
258 orang telah melayarinya

How Can You Declare Class Templates as Friends in C  ?

Mengisytiharkan Templat Kelas sebagai Rakan: Penyelaman Lebih Dalam

Dalam C , adalah mungkin untuk mentakrifkan kelas sebagai rakan kepada kelas lain, memberikan akses kepada ahli persendirian tanpa mengira enkapsulasi . Walau bagaimanapun, apabila berurusan dengan templat kelas, memahami perhubungan rakan asas menjadi penting.

Pertimbangkan kod contoh:

template<class T> class BE {
    T *data;
    BE *l, *r;
public:
    template<class U> friend class BT;
};

template<class T> class BT {
    BE<T> *root;
public:
...
private:
...
};
Salin selepas log masuk

Kod ini mentakrifkan kelas BE yang mewakili elemen pokok dan kelas BT yang mewakili pokok binari. Pada mulanya, percubaan dibuat untuk mengisytiharkan kelas rakan sebagai:

template<class T> friend class BT;
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini gagal. Untuk memahami sebabnya, adalah penting untuk mengenali bahawa parameter templat tidak boleh membayangi satu sama lain. Dalam templat bersarang, setiap tahap mesti mempunyai nama parameter templat yang unik.

Sebaliknya, pertimbangkan pengisytiharan ini:

template<class T> class BE {
    template<class U> friend class BT<U>;
};
Salin selepas log masuk

Ini menandakan bahawa BT ialah rakan BE tanpa mengira hujah templat BT. Setiap contoh BT, tanpa mengira jenis yang disimpannya, akan menjadi rakan BE.

Sebagai alternatif, jika pengisytiharan berikut digunakan:

template<class T> class BE {
    friend class BT<T>;
};
Salin selepas log masuk

Ini bermakna BT hanyalah sebuah rakan BE apabila hujah templat BT sepadan dengan BE. Dalam kes ini, sebagai contoh, BT akan menjadi kawan BE, tetapi bukan BE atau BE.

Dalam kes contoh pokok binari, mengisytiharkan kelas rakan sebagai kelas rakan BT; sudah memadai untuk menyediakan perhubungan yang diingini antara BT dan BE.

Atas ialah kandungan terperinci Bagaimana Anda Boleh Mengisytiharkan Templat Kelas sebagai Rakan dalam C?. 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