Pemula dan Agregat Ditetapkan dalam C 20
Dalam C 20, pemula yang ditetapkan menyediakan cara ringkas untuk memulakan jenis agregat dengan menyatakan ahli secara jelas untuk dimulakan. Walau bagaimanapun, sintaks ini mempunyai had apabila ia datang untuk memulakan kelas yang diwarisi.
Pertimbangkan coretan kod berikut:
<code class="cpp">struct Person { std::string name; std::string surname; unsigned age; }; struct Employee : Person { unsigned salary; };</code>
Kedua-dua Orang dan Pekerja adalah agregat, tetapi percubaan berikut untuk memulakan Pekerja menggunakan pemula yang ditetapkan gagal:
<code class="cpp">Employee e1{.name{"John"}, .surname{"Wick"}, .age{40}, .salary{50000}};</code>
Ini kerana Piawaian C menentukan bahawa pemula yang ditetapkan hanya boleh digunakan untuk memulakan ahli data bukan statik langsung bagi sesebuah kelas. Dalam contoh di atas, gaji ialah ahli pekerja kelas terbitan, bukan Orang kelas asas langsung, jadi permulaan yang ditetapkan tidak dibenarkan.
Sebaliknya, anda mesti menggunakan inisialisasi senarai tradisional untuk memulakan ahli yang diwarisi:
<code class="cpp">Employee e1{ "John", "Wick", 40, 50000 };</code>
Atau, seperti yang ditunjukkan oleh ulasan, anda boleh menggunakan senarai pemula yang ditetapkan bersarang untuk memulakan kelas asas:
<code class="cpp">Employee e1{ { .name{"John"}, .surname{"Wick"}, .age{40} }, 50000 };</code>
Dalam kes ini, kelas asas langsung dimulakan menggunakan senarai pemula yang ditetapkan, manakala kelas Pekerja secara keseluruhan dimulakan menggunakan senarai pemula biasa.
Atas ialah kandungan terperinci Bolehkah Inisialisasi Ditetapkan Digunakan untuk Memulakan Ahli Diwarisi dalam Agregat C 20?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!