Rumah >pembangunan bahagian belakang >C++ >Mengapa Pembina Diwarisi dalam C Memerlukan Definisi Eksplisit Sebelum C 11?

Mengapa Pembina Diwarisi dalam C Memerlukan Definisi Eksplisit Sebelum C 11?

DDD
DDDasal
2025-01-03 12:49:39306semak imbas

Why Do Inherited Constructors in C   Require Explicit Definition Before C  11?

Mewarisi Pembina: Memahami Ralat dan Peraturan Pewarisan

Apabila cuba mewarisi pembina daripada kelas asas tanpa mentakrifkannya semula secara eksplisit dalam terbitan kelas, seperti yang digambarkan dalam coretan kod yang disediakan, mengapa ia menghasilkan a ralat kompilasi?

Dalam C , sebelum C 11, pembina tidak diwarisi oleh kelas terbitan. Untuk melaksanakan pembina kelas asas, ia perlu dipanggil secara eksplisit dalam pembina kelas terbitan. Inilah sebabnya mengapa mesej ralat berikut dipaparkan dalam kod yang diberikan:

main.cpp:13: error: no matching function for call to ‘B::B(int)’
main.cpp:8: note: candidates are: B::B()
main.cpp:8: note:                 B::B(const B&)

Untuk mewarisi pembina dalam C 11 dan kemudian, kata kunci menggunakan diperkenalkan. Kata kunci ini boleh digunakan untuk mewarisi semua pembina kelas asas secara kolektif.

class A
{
public:
    explicit A(int x) {}
};

class B: public A
{
    using A::A; // Inherits all constructors of A
};

Pendekatan ini membolehkan anda mewarisi semua pembina kelas asas dalam satu baris kod. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pewarisan terpilih bagi pembina tertentu tidak mungkin menggunakan kaedah ini. Untuk mencapai pewarisan terpilih, anda mesti menulis pembina individu secara manual dalam kelas terbitan, memanggil pembina kelas asas mengikut keperluan.

Atas ialah kandungan terperinci Mengapa Pembina Diwarisi dalam C Memerlukan Definisi Eksplisit Sebelum C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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