Rumah > pembangunan bahagian belakang > C++ > Bolehkah Inisialisasi Ditetapkan Digunakan untuk Memulakan Ahli Diwarisi dalam Agregat C 20?

Bolehkah Inisialisasi Ditetapkan Digunakan untuk Memulakan Ahli Diwarisi dalam Agregat C 20?

Patricia Arquette
Lepaskan: 2024-10-29 02:44:02
asal
463 orang telah melayarinya

Can Designated Initializers be Used to Initialize Inherited Members in C  20 Aggregates?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan