Rumah > pembangunan bahagian belakang > C++ > Fungsi Maya vs. Tulen: Apakah Perbezaannya?

Fungsi Maya vs. Tulen: Apakah Perbezaannya?

Mary-Kate Olsen
Lepaskan: 2024-12-29 21:36:16
asal
344 orang telah melayarinya

Virtual vs. Pure Virtual Functions: What's the Difference?

Fungsi Maya Dijelaskan: Apa Itu dan Bagaimana Ia Berbeza daripada Fungsi Maya Tulen

Dalam pengaturcaraan berorientasikan objek, konsep fungsi maya adalah penting kepada polimorfisme masa larian. Fungsi maya ialah fungsi yang boleh ditindih dalam kelas terbitan untuk menyediakan pelaksanaan yang berbeza pada tahap hierarki kelas yang berbeza.

Perbezaan utama antara fungsi maya dan fungsi bukan maya ialah versi paling terbitan digunakan pada semua peringkat hierarki kelas apabila fungsi maya ditindih. Sebaliknya, kefungsian fungsi bukan maya kekal tidak berubah dalam kelas asas, walaupun ia ditindih dalam kelas terbitan.

Berikut ialah contoh untuk menggambarkan kelakuan fungsi maya:

struct Base {
    virtual ~Base() = default;

    virtual void foo() {
        std::cout << "Base::Foo" << std::endl;
    }
};

struct Derived final: Base {
    void foo() override {
        std::cout << "Derived::Foo" << std::endl;
    }
};
Salin selepas log masuk

Menjalankan kod ini menghasilkan output berikut:

Base::Foo
Derived::Foo
Derived::Foo
Salin selepas log masuk

Seperti yang anda lihat, apabila fungsi foo() dipanggil pada contoh kelas Derived, pelaksanaan Derived::foo() digunakan, walaupun semasa mengakses contoh melalui penuding kelas asas (Base* derived_as_base).

Fungsi Maya Tulen: Kes Khas

Fungsi maya tulen ialah fungsi maya yang diperlukan untuk dilaksanakan dalam terbitan kelas. Ia tidak ditakrifkan dalam kelas asas dan mesti ditindih dalam kelas terbitan untuk menjadikan kelas itu konkrit. Kelas dengan satu atau lebih fungsi maya tulen dianggap abstrak dan tidak boleh digunakan secara langsung.

Berikut ialah contoh fungsi maya tulen:

struct Base {
    virtual ~Base() = default;

    virtual void foo() = 0;
};

struct Derived final: Base {
    void foo() override {
        std::cout << "Derived::Foo" << std::endl;
    }
};
Salin selepas log masuk

Dalam kes ini, Pangkalan kelas ialah abstrak kerana ia mengandungi fungsi maya tulen foo(). Untuk menggunakan kelas ini, kelas terbitan mesti melaksanakan fungsi foo(), menjadikan kelas terbitan sebagai kelas konkrit yang boleh dijadikan instantiated.

Ringkasnya, fungsi maya membenarkan anda mengatasi fungsi kelas asas pada tahap yang berbeza hierarki, manakala fungsi maya tulen memerlukan kelas terbitan untuk melaksanakan fungsi khusus untuk menjadikan kelas itu konkrit. Memahami konsep ini adalah penting untuk menulis kod yang boleh diperluas dan polimorfik dalam pengaturcaraan berorientasikan objek.

Atas ialah kandungan terperinci Fungsi Maya vs. Tulen: Apakah Perbezaannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan