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

Bolehkah Inisialisasi Ditetapkan Digunakan untuk Memulakan Ahli Kelas Asas dalam C 20?

Mary-Kate Olsen
Lepaskan: 2024-10-29 19:06:30
asal
698 orang telah melayarinya

 Can Designated Initializers be Used to Initialize Base Class Members in 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>
Salin selepas log masuk

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>
    Salin selepas log masuk
  • Senarai pemula ditetapkan bersarang:

    <code class="cpp">Employee e1{ { .name{"John"}, .surname{"Wick"}, .age{40} }, 50000 };</code>
    Salin selepas log masuk

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

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!

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