Rumah > pembangunan bahagian belakang > C++ > Mengapakah Kita Tidak Boleh Menukar Penunjuk-ke-Penuding kepada Kelas Asas dalam C ?

Mengapakah Kita Tidak Boleh Menukar Penunjuk-ke-Penuding kepada Kelas Asas dalam C ?

Mary-Kate Olsen
Lepaskan: 2024-10-28 04:42:02
asal
438 orang telah melayarinya

Why Can't We Implicitly Convert a Pointer-to-Pointer to a Base Class in C  ?

Penukaran Tersirat Penunjuk-ke-Penunjuk Antara Kelas Terbitan dan Asas

Dalam C , kod berikut menimbulkan ralat:

<code class="cpp">Child **cc = &c;
Base **bb = cc;</code>
Salin selepas log masuk

Mesej ralat menunjukkan bahawa tiada penukaran tersirat daripada Kanak-kanak** kepada Pangkalan**. Walau bagaimanapun, adalah dibenarkan untuk menetapkan penuding anak kepada penuding asas:

<code class="cpp">Child *c = new Child();
Base *b = c;</code>
Salin selepas log masuk

Untuk memahami sebab perbezaan ini wujud, pertimbangkan perkara yang akan berlaku jika penukaran tersirat dibenarkan. Seseorang kemudiannya boleh melakukan perkara berikut:

<code class="cpp">*bb = new Base;</code>
Salin selepas log masuk

Ini akan menyebabkan c menunjuk kepada contoh Base, yang akan melanggar konsep kelas terbitan dan asas. Oleh itu, C melarang penukaran tersirat ini.

Untuk membenarkan penugasan antara Child** dan Base**, seseorang boleh menggunakan cast gaya C atau reinterpret_cast, tetapi mereka mengorbankan keselamatan jenis. Tiada cara untuk mencapai penukaran ini dengan hantaran tersirat atau hantaran_statik.

Atas ialah kandungan terperinci Mengapakah Kita Tidak Boleh Menukar Penunjuk-ke-Penuding kepada Kelas Asas dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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