Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Sifat `is_base_of` Menentukan Hubungan Kelas Asas, Walaupun dengan Pewarisan Persendirian?

Bagaimanakah Sifat `is_base_of` Menentukan Hubungan Kelas Asas, Walaupun dengan Pewarisan Persendirian?

Patricia Arquette
Lepaskan: 2024-11-30 21:43:12
asal
662 orang telah melayarinya

How Does the `is_base_of` Trait Determine Base Class Relationships, Even with Private Inheritance?

Is_Base_Of Trait Implementation

Is_base_of trait menyediakan cara untuk menentukan sama ada satu kelas berasal daripada kelas lain, walaupun dengan kehadiran private atau harta pusaka yang dilindungi. Pelaksanaannya bergantung pada penggunaan bijak templat fungsi dan jujukan penukaran yang ditentukan pengguna.

Cara Ia Berfungsi

Templat is_base_of mengambil dua parameter templat, B dan D, mewakili potensi asas dan kelas terbitan, masing-masing. Ia mentakrifkan dua fungsi ahli statik:

  • check(D*, T): Menerima penuding kepada kelas terbitan dan parameter templat T.
  • check(B*, int) : Menerima penuding kepada kelas asas dan integer.

Nilai ahli statik is_base_of ialah kemudian dimulakan menggunakan perbandingan saiz, yang pada asasnya menyemak sama ada saiz hasil pemanggilan semakan dengan Host objek adalah sama dengan saiz hasil "ya" (iaitu, saiz tatasusunan 1).

Warisan Asas Persendirian

Pelaksanaan mampu mengendalikan persendirian pewarisan asas kerana kelas Hos menyediakan operator tanpa operasi B*() const yang mengembalikan nullptr. Ini membenarkan pengkompil untuk menggantikan D* untuk B* dalam fungsi check(B*, int), walaupun B ialah pangkalan peribadi D.

Kepentingan Operator Const

Pengendali B*() yang diisytiharkan const adalah penting kerana ia memastikan bahawa pengkompil memilih fungsi penukaran calon yang mengambil hujah objek tersirat ini sebagai rujukan bukan const. Perbezaan halus ini membolehkan sifat_asas_sifat membezakan antara warisan awam dan persendirian dengan menyemak sama ada penukaran kepada jenis asas dibenarkan.

Fungsi Semak Templat

Keputusan untuk gunakan semakan fungsi templat(D*, T) dan bukannya semakan fungsi bukan templat(B*, int) bergantung pada peraturan resolusi beban lampau. Apabila mencari fungsi penukaran, jika dua fungsi sama berdaya maju, jenis pemulangan fungsi menentukan yang mana lebih baik. Dengan menggunakan templat dengan jenis pulangan ya, ia membolehkan pengkompil memilih versi semakan yang betul berdasarkan kewujudan penukaran yang ditentukan pengguna daripada D* kepada B*.

Atas ialah kandungan terperinci Bagaimanakah Sifat `is_base_of` Menentukan Hubungan Kelas Asas, Walaupun dengan Pewarisan Persendirian?. 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