Rumah >pembangunan bahagian belakang >C++ >Bolehkah Inisialisasi Ditetapkan Digunakan untuk Memulakan Ahli Kelas Asas dalam C 20?
Pemula yang Ditetapkan dalam C 20: Pengehadan Dijelaskan
Pemula yang ditetapkan yang diperkenalkan dalam C 20 membolehkan anda menyatakan secara eksplisit susunan pemulaan ahli untuk agregat . Walau bagaimanapun, soalan baru-baru ini telah timbul mengenai penggunaannya untuk kelas terbitan.
Dalam contoh kod yang disediakan:
<code class="cpp">struct Person { std::string name{}; std::string surname{}; unsigned age{}; }; struct Employee : Person { unsigned salary{DEFAULT_SALARY}; }; int main() { Employee e1{.name{"John"}, .surname{"Wick"}, .age{40}, .salary{50000}}; // doesn't compile Employee e2 {.salary{55000}}; // warning: missing initializer for base class member }</code>
Kod gagal untuk menyusun e1 kerana pemula yang ditetapkan hanya boleh digunakan untuk memulakan ahli bukan statik kelas terbitan secara langsung. Dalam erti kata lain, anda tidak boleh memulakan ahli kelas asas secara langsung dengan pemula yang ditetapkan.
Untuk menyelesaikan masalah ini, anda boleh menggunakan pendekatan berikut:
Pengamatan senarai tradisional:
<code class="cpp">Employee e1{ "John", "Wick", 40, 50000 };</code>
Senarai pemula ditetapkan bersarang:
<code class="cpp">Employee e1{ { .name{"John"}, .surname{"Wick"}, .age{40} }, 50000 };</code>
Sebagai alternatif, seperti yang dicadangkan oleh @Jarod42, anda juga boleh menentukan senarai pemula untuk kelas asas secara eksplisit:
<code class="cpp">Employee e1{ { .name{"John"}, .surname{"Wick"}, .age{40} }, .salary{50000} };</code>
Ini membenarkan anda untuk memulakan kedua-dua ahli kelas asas langsung dan ahli kelas terbitan menggunakan pemula yang ditetapkan.
Atas ialah kandungan terperinci Bolehkah Inisialisasi Ditetapkan Digunakan untuk Memulakan Ahli Kelas Asas dalam C 20?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!