Rumah >pembangunan bahagian belakang >C++ >Bilakah Casting Statik untuk Downcasting dalam C Selamat dan Bilakah Ia Mengakibatkan Gelagat Tidak Ditakrifkan?
Downcasting dengan Static Cast dalam C
Dalam pengaturcaraan berorientasikan objek, downcasting ialah teknik yang digunakan untuk menukar penunjuk kepada kelas asas kepada penunjuk kepada kelas terbitan. Dalam C , ini boleh dilakukan menggunakan pengendali static_cast.
Pertimbangkan kod berikut:
class Base { public: Base() {} virtual void func() {} }; class Derived : public Base { public: Derived() {} void func() {} void func_d() {} int a; }; int main() { Base *b = new Base(); std::cout << sizeof(*b) << std::endl; // Prints 4 Derived *d = static_cast<Derived *> (b); // Downcast the base pointer to a derived pointer std::cout << sizeof(*d) << std::endl; // Prints 8 d->func_d(); // Calls the derived class function }
Dalam kod ini, penuding kelas asas pada mulanya menunjuk ke objek Base. Menggunakan static_cast, kami menurunkan penuding asas kepada penuding kelas terbitan. Operator sizeof mendedahkan bahawa penuding terbitan kini menghala ke objek bersaiz lebih besar (8 bait), yang termasuk ahli kelas Derived.
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa penurunan yang dilakukan di sini adalah tidak sah. Static_cast membenarkan penukaran hanya jika objek yang ditunjuk oleh penuding asas sebenarnya adalah contoh kelas terbitan. Dalam kes ini, objek Base bukan objek Terbitan, menjadikan gelagat downcast tidak ditentukan.
Menurut standard C, downcasting menggunakan static_cast mengikut peraturan ini:
Jika syarat ini tidak dipenuhi, pelakon akan menghasilkan gelagat yang tidak ditentukan. Oleh itu, adalah penting untuk melakukan downcasting dengan berhati-hati dan memastikan kesahihan penukaran.
Atas ialah kandungan terperinci Bilakah Casting Statik untuk Downcasting dalam C Selamat dan Bilakah Ia Mengakibatkan Gelagat Tidak Ditakrifkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!