Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Kelas Templat Boleh Mewarisi dan Mengakses Ahli Yang Dilindungi daripada Kelas Asas Bergantungnya?

Bagaimanakah Kelas Templat Boleh Mewarisi dan Mengakses Ahli Yang Dilindungi daripada Kelas Asas Bergantungnya?

Patricia Arquette
Lepaskan: 2024-12-02 05:55:11
asal
214 orang telah melayarinya

How Can a Templated Class Inherit and Access Protected Members from its Dependent Base Class?

Resolusi Nama Bergantung dalam Pewarisan Templat

Dalam C , keupayaan untuk mengakses pembolehubah yang diwarisi bergantung pada jenis pewarisan dan konteks. Pertimbangkan kod berikut, di mana Bar mewarisi daripada kelas templat Foo:

template<class T> class Foo { ... };
template<class T> class Bar : public Foo<T> { ... };
Salin selepas log masuk

Dalam senario ini, persoalan timbul: bolehkah Bar mengakses pembolehubah dilindungi a Foo?

Pematuhan Standard dan Rasional

Versi baharu pengkompil GNU C mematuhi standard C, yang menyatakan bahawa nama yang tidak layak dalam templat adalah tidak bergantung. Ini bermakna nama-nama ini mesti diselesaikan apabila templat ditakrifkan. Walau bagaimanapun, memandangkan takrif kelas asas bergantung (Foo) tidak diketahui pada masa itu, nama yang tidak layak dalam Bar tidak boleh diselesaikan.

Penyelesaian: Resolusi Nama Eksplisit

Untuk mengakses a, Bar mesti menyatakan dengan jelas nama layaknya: Foo::a. Sebagai alternatif, pengisytiharan "menggunakan" boleh digunakan dalam Bar:

using Foo<T>::a;
int c = a * 4; // Accesses 'a' through namespace resolution
Salin selepas log masuk

Kesimpulannya, walaupun kelihatan intuitif untuk Bar untuk mewarisi pembolehubah dilindungi a daripada Foo, piawaian C menyatakan bahawa ini hanya mungkin. melalui resolusi nama yang jelas atau pengisytiharan "menggunakan". Ini memastikan gelagat yang konsisten dan jelas merentas instantiasi templat yang berbeza.

Atas ialah kandungan terperinci Bagaimanakah Kelas Templat Boleh Mewarisi dan Mengakses Ahli Yang Dilindungi daripada Kelas Asas Bergantungnya?. 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