Fungsi maya C++ membolehkan pengaturcaraan polimorfik melalui penghantaran dinamik, dan evolusinya termasuk: penunjuk maya, jadual fungsi maya, penghantaran dinamik dan maklumat jenis masa jalan (RTTI). Dalam kes sebenar, tingkah laku penghantaran dinamik jenis haiwan yang berbeza ditunjukkan melalui hubungan warisan kelas haiwan dan fungsi maya speak(). Fungsi maya terus berkembang dalam C++, meningkatkan kecekapan dan fleksibiliti pengaturcaraan polimorfik dan menjadi ciri utama untuk membolehkan kod teguh dan berskala.
Sejarah Evolusi Fungsi Maya dalam C++: Asal-usul dan Perubahan Pengaturcaraan Polimorfik
Pengenalan
Fungsi maya adalah ciri utama pengaturcaraan polimorfik yang disubkelaskan, yang membolehkan pengaturcaraan berobjektif C++ tanpa pengubahsuaian Tentukan semula tingkah lakunya tanpa menggunakan kod kelas asas. Artikel ini akan mengesan asal usul fungsi maya, membincangkan evolusinya dalam C++, dan menunjukkan aplikasinya melalui kes praktikal.
Asal: Prinsip Penggantian Liskov
Konsep pengaturcaraan polimorfik pertama kali dicadangkan oleh Barbara Liskov pada tahun 1987 dalam Prinsip Penggantian Liskov beliau yang terkenal. Prinsip ini menyatakan bahawa mana-mana subkelas boleh menggantikan kelas supernya tanpa mengubah ketepatan program.
Pelaksanaan C++ awal: penunjuk maya
Dalam versi awal C++, fungsi maya telah dilaksanakan melalui jadual penunjuk maya. Setiap objek mengandungi penunjuk ke jadual penunjuk maya, yang menyimpan penunjuk kepada setiap fungsi mayanya. Apabila fungsi maya dipanggil, pengkompil menggunakan jadual penunjuk ini untuk mencari alamat fungsi yang betul dan melaksanakannya.
Pengenalan jadual fungsi maya
C++ 2.0 memperkenalkan jadual fungsi maya, yang merupakan cara yang lebih cekap untuk melaksanakan fungsi maya. Jadual fungsi maya ialah tatasusunan yang menyimpan penunjuk fungsi maya semua objek. Objek memanggil fungsi mayanya dengan mengindeks ke dalam tatasusunan ini, dengan itu mengelakkan overhed mencari jadual penunjuk maya.
Penghantaran dinamik
Penghantaran dinamik ialah salah satu ciri utama fungsi maya. Ia membenarkan objek memanggil versi fungsi maya yang betul pada masa jalan berdasarkan jenis sebenarnya. Ini dicapai dengan menyimpan penunjuk ke vtable yang betul dalam jadual objek objek apabila ia dibuat.
RTTI (Run-Time Type Information)
Run-time Type Information (RTTI) membenarkan atur cara untuk menentukan jenis objek semasa runtime. Ini membolehkan program menulis kod teguh yang berkelakuan berbeza bergantung pada jenis objek. Dalam C++, RTTI dilaksanakan melalui pengendali typeid
dan dynamic_cast
. typeid
和 dynamic_cast
操作符来实现。
实战案例:动物花园模拟
考虑一个模拟动物园的程序。每个动物类都从一个基类 Animal
派生,它定义了所有动物共享的共同行为 (eat()
和 sleep()
)。不同种类的动物可以定义自己的 speak()
Kes Praktikal: Simulasi Taman Haiwan
Pertimbangkan program yang menyerupai zoo. Setiap kelas Haiwan berasal daripada kelas asas Animal
, yang mentakrifkan tingkah laku biasa yang dikongsi oleh semua haiwan (eat()
dan sleep()
). Spesies haiwan yang berbeza boleh menentukan kaedah speak()
mereka sendiri, yang tingkah lakunya berbeza bergantung pada jenis haiwan.
class Animal { public: virtual void eat() = 0; virtual void sleep() = 0; }; class Dog : public Animal { public: void eat() override { cout << "Dog eating" << endl; } void sleep() override { cout << "Dog sleeping" << endl; } void speak() { cout << "Woof!" << endl; } }; class Cat : public Animal { public: void eat() override { cout << "Cat eating" << endl; } void sleep() override { cout << "Cat sleeping" << endl; } void speak() { cout << "Meow!" << endl; } };
int main() { Animal* dog = new Dog(); Animal* cat = new Cat(); dog->speak(); // 输出 "Woof!" cat->speak(); // 输出 "Meow!" return 0; }
Atas ialah kandungan terperinci Sejarah evolusi fungsi maya C++: mengesan asal usul dan perubahan pengaturcaraan polimorfik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!