Fungsi maya membenarkan fungsi kelas asas mengatasi dalam kelas terbitan dan memanggil fungsi yang sesuai berdasarkan jenis objek semasa masa jalan: Cipta fungsi maya: Gunakan kata kunci maya dalam kelas asas untuk mengisytiharkan fungsi. Gantikan fungsi maya: Gunakan kata kunci ganti dalam kelas terbitan untuk mengatasi fungsi maya kelas asas. Panggilan sebenar: Apabila objek kelas terbitan dihalakan melalui penuding atau rujukan kelas asas, versi yang diganti akan dipanggil. Fungsi maya terbongkar: Jika tidak ditindih, pelaksanaan asal kelas asas akan dipanggil. Panggil dengan penuding atau rujukan: Laksanakan polimorfisme, membenarkan penuding atau rujukan daripada kelas asas untuk menunjuk ke objek kelas terbitan dan memanggil fungsi mengatasi yang sesuai pada masa jalan.
Fungsi maya ialah mekanisme polimorfisme dalam C++. Ia membenarkan fungsi dalam kelas asas untuk ditindih dalam kelas terbitan, membenarkan fungsi yang sesuai dipanggil pada masa jalan berdasarkan jenis objek sebenar.
Untuk mencipta fungsi maya, anda perlu mengisytiharkan fungsi dalam kelas asas menggunakan kata kunci virtual
关键字声明该函数,如下所示:
class Base { public: virtual void print() { cout << "Base class" << endl; } };
在派生类中,可以使用 override
关键字覆盖基类中的虚拟函数,如下所示:
class Derived : public Base { public: override void print() { cout << "Derived class" << endl; } };
考虑以下一个简单的示例:
#include <iostream> using namespace std; class Animal { public: virtual void speak() { cout << "Animal speaks" << endl; } }; class Dog : public Animal { public: override void speak() { cout << "Dog barks" << endl; } }; int main() { Animal* a = new Dog(); a->speak(); // 输出:Dog barks return 0; }
在这个示例中,基类 Animal
定义了 speak()
虚拟函数,它在 Dog
派生类中被覆盖。当我们通过 Animal*
指针调用 speak()
rrreee
override
untuk mengatasi fungsi maya dalam kelas asas seperti berikut: rrreeeContoh praktikal
Pertimbangkan contoh mudah berikut:rrreee
Dalam contoh ini, kelas asas Animal
mentakrifkan fungsi maya speak()
, yang ditindih dalam kelas terbitan Dog
. Apabila kita memanggil fungsi speak()
melalui penuding Animal*
, versi yang diganti dipanggil, mengeluarkan "Salak anjing". Penyelesaian soalan
S: Mengapa anda perlu menggunakan penunjuk atau rujukan untuk memanggil fungsi maya?
🎜🎜Jawapan: Untuk mencapai polimorfisme, penunjuk atau rujukan daripada kelas asas boleh menunjuk kepada objek kelas terbitan, membenarkan fungsi mengatasi yang sesuai dipanggil pada masa jalan. 🎜🎜🎜S: Apakah yang berlaku jika fungsi maya tidak ditindih dalam kelas terbitan? 🎜🎜🎜Jawapan: Dalam kes ini, pelaksanaan asal dalam kelas asas akan dipanggil. 🎜Atas ialah kandungan terperinci Aplikasi praktikal fungsi maya C++: contoh kod dan penyelesaian masalah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!