Penukaran Tersirat Penunjuk ke Penunjuk antara Kelas Terbitan dan Asas
Apabila berurusan dengan penukaran penuding ke penuding antara terbitan dan asas kelas, ralat biasa yang dihadapi ialah ketidakupayaan untuk menukar secara tersirat penuding ke penuding kelas terbitan (Kanak) kepada penuding ke penuding kelas asas (Asas). Ini kerana penukaran sedemikian boleh membawa kepada situasi yang tidak dijangka dan berpotensi berbahaya.
Pertimbangkan contoh program yang disediakan:
<code class="cpp">class Base { }; class Child : public Base { }; int main() { Child *c = new Child(); Base *b = c; Child **cc = &c; Base **bb = cc; // error: invalid conversion from ‘Child**’ to ‘Base**’ }</code>
Ralat timbul kerana pengkompil menghalang penetapan cc (a Child ) kepada bb (sebuah Pangkalan). Sebab asas larangan ini adalah untuk melindungi daripada kemungkinan ketidakkonsistenan dalam objek yang ditunjukkan oleh bb. Jika penukaran sedemikian dibenarkan, ia boleh membawa kepada senario di mana bb menunjuk kepada contoh Base yang bukan berasal daripada Child.
Untuk menangani isu ini, terdapat dua pendekatan:
Atas ialah kandungan terperinci Mengapa Anda Tidak Boleh Menukar Penunjuk-ke-Penunjuk Kelas Terbitan kepada Penunjuk-ke-Penunjuk Kelas Asas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!