Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Kelas Terbitan Boleh Melaksanakan Fungsi Maya Tulen Peribadi dalam Kelas Asas?

Bagaimanakah Kelas Terbitan Boleh Melaksanakan Fungsi Maya Tulen Peribadi dalam Kelas Asas?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-04 06:45:02152semak imbas

How Can Derived Classes Implement Private Pure Virtual Functions in a Base Class?

Fungsi Maya Tulen dalam Skop Peribadi

Apabila menghadapi kod dengan fungsi maya tulen peribadi dalam kelas asas, seperti dalam contoh yang disediakan :

class Engine
{
public:
    void SetState( int var, bool val );
    void SetState( int var, int val );

private:
    virtual void SetStateBool( int var, bool val ) = 0;    
    virtual void SetStateInt ( int var, int val ) = 0;    
};

nampaknya kelas terbitan tidak boleh mengakses fungsi ini untuk melaksanakannya. Walau bagaimanapun, kelas terbitan boleh mengatasi fungsi maya peribadi, menyediakan pelaksanaannya sendiri. Ini tidak boleh dikelirukan dengan ketidakupayaan kaedah kelas terbitan untuk memanggil fungsi maya daripada kelas asas.

Pemisahan Antara Muka dan Pelaksanaan

Fungsi maya peribadi membenarkan pemisahan spesifikasi antara muka daripada pelaksanaan yang boleh disesuaikan dalam kelas terbitan. Antara muka awam terdiri daripada satu set fungsi bukan maya terlampau beban yang memanggil fungsi maya peribadi tanpa beban. Simpulan bahasa ini, yang dikenali sebagai "Panggilan Awam Bukan Beban Maya Terpelihara Tanpa Beban Maya", membantu mengurus peraturan persembunyian.

Mencegah Penyembunyian

Dalam senario di mana antara muka awam bukan maya dan pelaksanaan maya adalah peribadi, pengarang kelas terbitan hanya boleh menyediakan pelaksanaan fungsi maya mereka sendiri tanpa perlu risau tentang menyembunyikan ahli kelas asas. Contohnya:

class MyTurbochargedV8 : public Engine
{
private:
    void SetStateInt(int var, int val )  {/* new implementation */}
};

Atas ialah kandungan terperinci Bagaimanakah Kelas Terbitan Boleh Melaksanakan Fungsi Maya Tulen Peribadi dalam Kelas Asas?. 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