Fungsi Maya Dijelaskan: Apa Itu dan Bagaimana Ia Berbeza daripada Fungsi Maya Tulen
Dalam pengaturcaraan berorientasikan objek, konsep fungsi maya adalah penting kepada polimorfisme masa larian. Fungsi maya ialah fungsi yang boleh ditindih dalam kelas terbitan untuk menyediakan pelaksanaan yang berbeza pada tahap hierarki kelas yang berbeza.
Perbezaan utama antara fungsi maya dan fungsi bukan maya ialah versi paling terbitan digunakan pada semua peringkat hierarki kelas apabila fungsi maya ditindih. Sebaliknya, kefungsian fungsi bukan maya kekal tidak berubah dalam kelas asas, walaupun ia ditindih dalam kelas terbitan.
Berikut ialah contoh untuk menggambarkan kelakuan fungsi maya:
struct Base { virtual ~Base() = default; virtual void foo() { std::cout << "Base::Foo" << std::endl; } }; struct Derived final: Base { void foo() override { std::cout << "Derived::Foo" << std::endl; } };
Menjalankan kod ini menghasilkan output berikut:
Base::Foo Derived::Foo Derived::Foo
Seperti yang anda lihat, apabila fungsi foo() dipanggil pada contoh kelas Derived, pelaksanaan Derived::foo() digunakan, walaupun semasa mengakses contoh melalui penuding kelas asas (Base* derived_as_base).
Fungsi Maya Tulen: Kes Khas
Fungsi maya tulen ialah fungsi maya yang diperlukan untuk dilaksanakan dalam terbitan kelas. Ia tidak ditakrifkan dalam kelas asas dan mesti ditindih dalam kelas terbitan untuk menjadikan kelas itu konkrit. Kelas dengan satu atau lebih fungsi maya tulen dianggap abstrak dan tidak boleh digunakan secara langsung.
Berikut ialah contoh fungsi maya tulen:
struct Base { virtual ~Base() = default; virtual void foo() = 0; }; struct Derived final: Base { void foo() override { std::cout << "Derived::Foo" << std::endl; } };
Dalam kes ini, Pangkalan kelas ialah abstrak kerana ia mengandungi fungsi maya tulen foo(). Untuk menggunakan kelas ini, kelas terbitan mesti melaksanakan fungsi foo(), menjadikan kelas terbitan sebagai kelas konkrit yang boleh dijadikan instantiated.
Ringkasnya, fungsi maya membenarkan anda mengatasi fungsi kelas asas pada tahap yang berbeza hierarki, manakala fungsi maya tulen memerlukan kelas terbitan untuk melaksanakan fungsi khusus untuk menjadikan kelas itu konkrit. Memahami konsep ini adalah penting untuk menulis kod yang boleh diperluas dan polimorfik dalam pengaturcaraan berorientasikan objek.
Atas ialah kandungan terperinci Fungsi Maya vs. Tulen: Apakah Perbezaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!