Rumah >pembangunan bahagian belakang >C++ >Bolehkah Anda Mencipta Vektor Kelas Abstrak dalam C?
Vektor Kelas Abstrak dalam C : Primer A
Dalam C , kelas abstrak menyediakan cara untuk menentukan antara muka tanpa pelaksanaan, membenarkan kelas terbitan untuk mewarisi dan melaksanakan tingkah laku tertentu. Walau bagaimanapun, tidak seperti dalam C#, di mana antara muka boleh digunakan secara langsung, kelas abstrak dalam C tidak boleh.
Masalahnya
Pertimbangkan contoh C berikut:
class IFunnyInterface { public: virtual void IamFunny() = 0; };
Kelas abstrak ini mewakili antara muka dengan satu kaedah, IamFunny. Sekarang, katakan kita ingin mencipta vektor objek yang melaksanakan antara muka ini, seperti:
std::vector<IFunnyInterface> funnyItems;
Kod ini akan mengakibatkan ralat pengkompil berikut:
error C2259: 'IFunnyInterface' : cannot instantiate abstract class
Ralat ini berlaku kerana C tidak membenarkan instantiasi kelas abstrak.
A Penyelesaian
Satu penyelesaian ialah menggantikan kelas abstrak dengan kelas konkrit yang memberikan pengecualian apabila cuba memanggil kaedah yang tidak dilaksanakan:
class IFunnyInterface { public: virtual void IamFunny() { throw new std::exception("not implemented"); } };
Walaupun penyelesaian ini membenarkan instantiasi vektor , ia memperkenalkan kemungkinan perangkap: kod yang cuba mengakses kaedah objek IFunnyInterface perlu mengendalikan pengecualian.
Penyelesaian Alternatif
Penyelesaian yang lebih elegan ialah menggunakan vektor penunjuk ke kelas abstrak:
std::vector<IFunnyInterface*> ifVec;
Pendekatan ini membolehkan untuk tingkah laku polimorfik dan mengelakkan masalah penghirisan objek yang boleh berlaku dengan penyimpanan nilai langsung.
Dengan memahami batasan abstrak instantiation kelas dalam C , anda boleh menggunakan penyelesaian yang sesuai atau menggunakan alternatif untuk mencapai kefungsian yang diingini dalam kod anda.
Atas ialah kandungan terperinci Bolehkah Anda Mencipta Vektor Kelas Abstrak dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!