Rumah > Artikel > pembangunan bahagian belakang > Rahsia fungsi maya C++ terbongkar
Fungsi maya menggunakan pengikatan dinamik untuk menentukan fungsi yang akan dipanggil pada masa jalan untuk mencapai polimorfisme. Kelebihannya termasuk kebolehskalaan dan kebolehgunaan semula, tetapi ia juga memperkenalkan overhed dan kerumitan. Fungsi maya sering digunakan untuk melaksanakan kaedah pelbagai jenis objek dengan cara yang seragam.
Fungsi maya ialah alat berkuasa dalam C++ yang membolehkan anda mencipta kaedah yang boleh ditindih oleh kelas terbitan. Ini bermakna anda boleh menulis kod kelas asas dan kemudian menyesuaikannya mengikut keperluan dalam kelas terbitan.
Fungsi maya menggunakan teknik yang dipanggil pengikatan dinamik (juga dikenali sebagai pengikatan lewat). Tidak seperti pengikatan statik (juga dikenali sebagai pengikatan awal), yang menentukan fungsi yang akan dipanggil pada masa penyusunan, pengikatan dinamik ditentukan pada masa jalan.
Ini bermakna apabila anda memanggil fungsi maya, pengkompil menjana penunjuk ke jadual fungsi maya. Jadual ini mengandungi penunjuk kepada fungsi yang dilaksanakan oleh setiap kelas terbitan. Pada masa berjalan, penunjuk ini digunakan untuk memilih fungsi untuk dipanggil.
Kelebihan fungsi maya termasuk:
Fungsi maya juga mempunyai beberapa kelemahan, termasuk:
Pertimbangkan contoh berikut:
class Shape { public: virtual double area() = 0; // 纯虚函数 virtual double perimeter() = 0; // 纯虚函数 }; class Circle : public Shape { public: Circle(double radius) : _radius(radius) {} double area() override { return M_PI * _radius * _radius; } double perimeter() override { return 2 * M_PI * _radius; } private: double _radius; }; class Square : public Shape { public: Square(double side) : _side(side) {} double area() override { return _side * _side; } double perimeter() override { return 4 * _side; } private: double _side; }; int main() { Shape* shapes[] = { new Circle(5), new Square(3) }; for (Shape* shape : shapes) { std::cout << "Area: " << shape->area() << std::endl; std::cout << "Perimeter: " << shape->perimeter() << std::endl; } delete[] shapes; return 0; }
Dalam contoh ini, kelas Shape
mengisytiharkan dua fungsi maya tulen area()
dan perimeter ( )
. Kelas terbitan Bulatan
dan Square
mengatasi fungsi ini, menyediakan pelaksanaan khusus untuk setiap bentuk. Shape
类声明了两个纯虚函数 area()
和 perimeter()
。Circle
和 Square
派生类覆盖了这些函数,为每种形状提供了特定的实现。
main()
main()
menggunakan pengikatan dinamik untuk memanggil fungsi maya yang berbeza, bergantung pada jenis objek semasa. Ini membolehkan kami menggunakan antara muka bersatu untuk mengendalikan bentuk yang berbeza. 🎜Atas ialah kandungan terperinci Rahsia fungsi maya C++ terbongkar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!