Mewarisi Pembina
Coretan kod yang anda berikan:
class A { public: explicit A(int x) {} }; class B: public A { }; int main(void) { B *b = new B(5); delete b; }
menghasilkan ralat apabila disusun dengan GCC kerana ia kekurangan pembina yang sepadan untuk B(int). Walaupun anda mungkin menjangkakan B akan mewarisi pembina A, ini tidak berlaku secara lalai dalam C .
Dalam C 11 dan kemudian, ciri baharu yang dipanggil warisan pembina menggunakan menggunakan telah diperkenalkan. Dengan menambah menggunakan A::A; dalam kelas B, anda boleh mewarisi semua pembina A secara eksplisit.
class A { public: explicit A(int x) {} }; class B: public A { using A::A; };
Walau bagaimanapun, pewarisan pembina ialah konsep semua atau tiada. Anda tidak boleh secara selektif mewarisi pembina tertentu sahaja. Jika anda cuba berbuat demikian, anda perlu mentakrifkan pembina yang dikehendaki secara manual dan secara eksplisit memanggil pembina asas daripada setiap pembina.
Dalam C 03 dan lebih awal, pewarisan pembina tidak disokong. Pembina perlu diwarisi secara manual dengan memanggil pembina asas secara individu dalam setiap pembina kelas terbitan.
Untuk kelas asas templat, anda boleh menggunakan sintaks templat untuk mewarisi semua pembina. Contohnya:
template<class T> class my_vector : public vector<T> { public: using vector<T>::vector; ///Takes all vector's constructors /* */ };
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mewarisi Pembina dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!