Pemutus Dinamik kepada Kelas Terbitan dalam C
Tuangan dinamik ialah teknik yang digunakan untuk menukar objek daripada kelas asas kepada kelas terbitan. Walau bagaimanapun, ini boleh membawa kepada ralat jika objek bukan jenis yang betul.
Masalah:
Percubaan untuk menghantar objek kelas asas kepada hasil kelas terbitan dalam ralat: "Tidak boleh menukar daripada BaseType kepada DerivedType. Tiada pembina boleh mengambil jenis sumber, atau resolusi bebanan pembina telah samar-samar."
BaseType m_baseType; DerivedType m_derivedType = m_baseType; // Error DerivedType m_derivedType = (DerivedType)m_baseType; // Error DerivedType * m_derivedType = (DerivedType*) &m_baseType; // Error
Penyelesaian:
Memahami konsep berorientasikan objek adalah penting untuk mengelakkan ralat ini. Pertimbangkan hierarki haiwan berikut:
class Animal { /* Virtual members */ }; class Dog : public Animal {}; class Cat : public Animal {};
Peraturan Casting:
Contoh:
Dog dog; Cat cat; Animal& AnimalRef1 = dog; // Upcasting OK Animal& AnimalRef2 = cat; // Upcasting OK Animal* AnimalPtr1 = &dog; // Upcasting OK Animal* AnimalPtr2 = &cat; // Upcasting OK Cat& catRef1 = dynamic_cast<Cat&>(AnimalRef1); // Throws exception (not a cat) Cat* catPtr1 = dynamic_cast<Cat*>(AnimalPtr1); // Returns NULL (not a cat) Cat& catRef2 = dynamic_cast<Cat&>(AnimalRef2); // Succeeds Cat* catPtr2 = dynamic_cast<Cat*>(AnimalPtr2); // Succeeds
Nota Penting:
Pemutus dinamik harus digunakan dengan berhati-hati, terutamanya apabila bekerja dengan hierarki warisan. Sebaliknya, pilih kaedah maya untuk polimorfisme dan mengakses sifat objek.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Casting Dinamik ke Kelas Terbitan dengan Selamat dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!