Senarai Permulaan dan Permulaan Ahli Dilindungi
Dalam pengaturcaraan berorientasikan objek menggunakan C , adalah amalan biasa bagi kelas untuk mewarisi daripada kelas induk dan meluaskan fungsinya. Walau bagaimanapun, persoalan timbul: bolehkah senarai permulaan bagi pembina kelas kanak-kanak digunakan untuk memulakan ahli data yang diisytiharkan sebagai dilindungi dalam kelas induk?
Dalam percubaan untuk mencapai ini, seseorang mungkin mempunyai kod yang serupa dengan berikut:
<code class="cpp">class Parent { protected: std::string something; }; class Child : public Parent { private: Child() : something("Hello, World!") {} };</code>
Walau bagaimanapun, percubaan ini akan mengakibatkan ralat pengkompil, yang menunjukkan bahawa kelas Child tidak mempunyai medan yang dinamakan sesuatu. Ini kerana sesuatu ahli data diisytiharkan sebagai dilindungi dalam kelas induk.
Untuk memulakan ahli yang dilindungi menggunakan senarai permulaan kelas anak, pendekatan alternatif diperlukan. Pembina dengan permulaan yang diperlukan boleh ditambah pada kelas induk, dan pembina ini kemudiannya boleh dipanggil daripada pembina kelas kanak-kanak. Ini boleh dicapai melalui pemajuan pembina:
<code class="cpp">class Parent { protected: Parent(const std::string& something) : something(something) {} std::string something; }; class Child : public Parent { private: Child() : Parent("Hello, World!") {} };</code>
Dalam kod yang diubah suai ini, pembina yang dilindungi ditambahkan pada kelas Induk dan ia memerlukan parameter rentetan. Pembina kelas Kanak-kanak kemudian memanggil pembina dilindungi kelas Induk menggunakan pemajuan pembina untuk menghantar hujah yang diperlukan dan memulakan sesuatu ahli data.
Atas ialah kandungan terperinci Bilakah Senarai Permulaan Pembina Kelas Kanak-Kanak Boleh Digunakan untuk Memulakan Ahli Data Dilindungi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!