Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Rahsia fungsi maya C++ terbongkar

Rahsia fungsi maya C++ terbongkar

WBOY
WBOYasal
2024-04-19 09:18:01366semak imbas

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.

C++ 虚函数的奥秘揭晓

Rahsia fungsi maya C++ didedahkan

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.

Cara fungsi maya berfungsi

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

Kelebihan fungsi maya termasuk:

  • Kelanjutan: Anda boleh menambah fungsi baharu pada kod sedia ada tanpa perlu mengubah suai kod kelas asas.
  • Kebolehgunaan semula: Anda boleh berkongsi kod biasa sambil masih membenarkan kelas terbitan untuk menyesuaikan tingkah laku.
  • Polymorphism: Fungsi maya adalah asas untuk mencapai polimorfisme, jadi objek boleh memanggil kaedah dengan cara yang seragam, walaupun ia adalah objek dari jenis yang berbeza.

Kelemahan fungsi maya

Fungsi maya juga mempunyai beberapa kelemahan, termasuk:

  • Overhead: Mencipta dan mencari jadual fungsi maya akan membawa overhed masa jalan tertentu.
  • Kerumitan: Memahami dan menyahpepijat kod untuk fungsi maya boleh menjadi rumit.

Kes Praktikal

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()CircleSquare 派生类覆盖了这些函数,为每种形状提供了特定的实现。

main()

Fungsi 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn