Rumah > Artikel > pembangunan bahagian belakang > Fungsi maya dan pengikatan dinamik dalam fungsi C++ membebankan dan menulis semula
Melebihi beban dan menulis semula fungsi: Melebihkan fungsi membenarkan penciptaan fungsi dengan nama yang sama dengan senarai parameter berbeza dalam kelas yang sama, manakala mengatasi fungsi adalah untuk mengatasi fungsi nama yang sama kelas asas dengan subkelas dalam perhubungan warisan. Fungsi maya dan pengikatan dinamik: Fungsi maya membenarkan subkelas melaksanakan kaedah kelas induk dengan cara mereka sendiri dan mengisytiharkannya dengan kata kunci maya dalam tandatangan fungsi. Pengikatan dinamik menentukan pelaksanaan fungsi yang dipanggil semasa runtime, dan ia berlaku apabila penunjuk kelas induk menunjuk ke objek kelas anak. Dalam kes mengatasi, walaupun fungsi maya dipanggil melalui penunjuk kelas induk, pelaksanaan subkelas juga akan dipanggil, yang mencerminkan kelebihan pengikatan dinamik.
Fungsi berlebihan dan penulisan semula dalam C++: peranan fungsi maya dan pengikatan dinamik
Dalam C++, lebihan beban dan penulisan semula fungsi ialah dua konsep utama yang boleh mencapai skalabiliti dan fleksibiliti kod. Perbezaan di antara mereka ialah:
Fungsi maya dan pengikatan dinamik memainkan peranan penting dalam penulisan semula fungsi.
Fungsi maya
Fungsi maya ialah fungsi khas yang membenarkan subkelas melaksanakan kaedah kelas induk dengan cara yang berbeza. Ia diisytiharkan dengan menyatakan kata kunci virtual
dalam tandatangan fungsi. Contohnya: virtual
关键字来声明。例如:
class Base { public: virtual void print() { cout << "Base class print" << endl; } };
动态绑定
动态绑定是在运行时确定调用哪个函数实现版本的过程。当父类指针指向子类对象时,就会发生动态绑定。例如:
Base* basePtr = new Derived(); // 指向 Derived 对象的 Base 指针 basePtr->print(); // 调用 Derived::print()
在重写的情况下,子类对虚函数的实现将被调用,即使通过父类指针进行调用,这是动态绑定的优点之一。
实战案例
考虑以下代码,它展示了函数重写和虚函数如何在实际场景中协同工作:
class Animal { public: virtual string speak() { return "Default animal sound"; } }; class Dog : public Animal { public: virtual string speak() override { return "Woof"; } }; class Cat : public Animal { public: virtual string speak() override { return "Meow"; } }; int main() { Animal* animalPtr; // 声明父类指针 // 分别创建 Dog 和 Cat 对象并将其分配给 animalPtr animalPtr = new Dog(); cout << animalPtr->speak() << endl; // 输出 "Woof" animalPtr = new Cat(); cout << animalPtr->speak() << endl; // 输出 "Meow" return 0; }
在这个例子中,Animal
类包含一个虚函数 speak()
,它被子类 Dog
和 Cat
重写。当 animalPtr
指向不同的子类对象时,调用 speak()
rrreee
Dynamic Binding
🎜🎜Dynamic binding ialah proses menentukan pada masa jalan versi pelaksanaan fungsi yang hendak dipanggil. Pengikatan dinamik berlaku apabila penunjuk kelas induk menunjuk ke objek kelas kanak-kanak. Contohnya: 🎜rrreee🎜Dalam kes overriding, pelaksanaan subkelas bagi fungsi maya akan dipanggil, walaupun ia dipanggil melalui penunjuk kelas induk, yang merupakan salah satu kelebihan pengikatan dinamik. 🎜🎜🎜Contoh Praktikal🎜🎜🎜Pertimbangkan kod berikut, yang menunjukkan cara mengatasi fungsi dan fungsi maya berfungsi bersama dalam senario dunia sebenar: 🎜rrreee🎜Dalam contoh ini, kelasAnimal
mengandungi maya fungsi speak()
, yang ditindih oleh subkelas Dog
dan Cat
. Apabila animalPtr
menghala ke objek subkelas yang berbeza, memanggil speak()
akan mengikat secara dinamik mengikut jenis objek sebenar, dengan itu mengeluarkan bunyi yang berbeza. 🎜🎜Dengan menggunakan fungsi maya dan pengikatan dinamik, kami boleh menulis kod yang fleksibel dan boleh diperluas, serta boleh memilih pelaksanaan fungsi yang berbeza mengikut jenis objek semasa masa jalan. 🎜Atas ialah kandungan terperinci Fungsi maya dan pengikatan dinamik dalam fungsi C++ membebankan dan menulis semula. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!