Apabila mewarisi kelas dengan ahli data yang dilindungi, mungkin wajar untuk memulakan mereka menggunakan senarai permulaan anak pembina kelas. Walau bagaimanapun, pendekatan ini selalunya membawa kepada ralat penyusunan.
Dalam contoh ini:
<code class="cpp">class Parent { protected: std::string something; }; class Child : public Parent { private: Child() : something("Hello, World!") {} };</code>
Menyusun kod ini akan mengakibatkan ralat, kerana kelas anak Child tidak mempunyai ahli yang menamakan sesuatu .
Untuk menyelesaikan masalah ini, kelas induk Induk mesti mentakrifkan pembina yang memulakan sesuatu ahli yang dilindungi. Pembina ini boleh diisytiharkan dilindungi, membenarkan kelas terbitan mengaksesnya.
Kod yang diubah suai di bawah akan berjaya disusun:
<code class="cpp">class Parent { protected: std::string something; Parent(const std::string& something) : something(something) {} }; class Child : public Parent { private: Child() : Parent("Hello, World!") {} };</code>
Dalam kod yang diubah suai ini, pembina yang dilindungi dalam kelas Induk memajukan hujah pemula kepada sesuatu ahli, membolehkan kelas kanak-kanak memulakan ahli dilindungi ibu bapa semasa pemulaannya sendiri.
Dengan mengikuti sintaks ini, menjadi mungkin untuk memulakan ahli induk yang dilindungi menggunakan senarai permulaan kelas anak, menyediakan kawalan dan fleksibiliti yang lebih besar dalam pemulaan objek merentas hierarki warisan.
Atas ialah kandungan terperinci Bolehkah Kelas Kanak-kanak Memulakan Ahli Ibu Bapa yang Dilindungi Melalui Senarai Permulaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!