Rumah >pembangunan bahagian belakang >C++ >Bolehkah Fungsi Ahli Statik Menjadi Maya dalam C?

Bolehkah Fungsi Ahli Statik Menjadi Maya dalam C?

Susan Sarandon
Susan Sarandonasal
2024-10-31 05:19:30241semak imbas

Can Static Member Functions Be Virtual in C  ?

Memahami Ahli Maya Statik dalam C

Dalam C , tidak mungkin untuk mentakrifkan secara langsung fungsi ahli yang bersifat statik dan maya. Pengkompil akan mengeluarkan ralat apabila cuba mengisytiharkan "ahli maya statik()". Walau bagaimanapun, terdapat teknik untuk mencapai kefungsian yang setara.

Mencapai Kesan

Untuk meniru kelakuan fungsi ahli maya statik, pertimbangkan pendekatan berikut:

<code class="cpp">struct Object
{
    struct TypeInformation;

    static const TypeInformation &GetTypeInformation()
    {
        return GetTypeInformationImpl();
    }

protected:
    virtual const TypeInformation &GetTypeInformationImpl() const = 0;
};</code>

Di sini, fungsi GetTypeInformation() ditakrifkan sebagai statik dan mengembalikan rujukan tetap kepada jenis TypeInformation. Walau bagaimanapun, pelaksanaan sebenar fungsi ini diwakilkan kepada kelas terbitan melalui fungsi maya yang dilindungi GetTypeInformationImpl().

Faedah Pendekatan ini:

  1. Penghantaran Dinamik Maya: Memanggil Object::GetTypeInformation() pada contoh kelas terbitan akan menggunakan pelaksanaan kelas terbitan yang sesuai bagi GetTypeInformationImpl().
  2. Akses Statik: Calling Object::GetTypeInformation(). ) terus daripada skop kelas masih akan mengakses pelaksanaan kelas asas, memberikan gelagat statik yang diingini.

Nota Tambahan:

  • Pendekatan ini memerlukan fungsi maya bukan statik untuk ditakrifkan dalam kelas asas (dalam kes ini, GetTypeInformationImpl()).
  • Jika dikehendaki, fungsi bukan maya statik eksplisit boleh disediakan dalam kelas terbitan untuk membenarkan akses bukan maya kepada pelaksanaan kelas terbitan.

Atas ialah kandungan terperinci Bolehkah Fungsi Ahli Statik Menjadi Maya dalam C?. 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