Rumah >pembangunan bahagian belakang >C++ >Mengapa Pembina Diwarisi dalam C Memerlukan Definisi Eksplisit Sebelum 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!