Bolehkah Fungsi Ahli Statik Menjadi Maya dalam C?

Susan Sarandon
Lepaskan: 2024-10-31 05:19:30
asal
134 orang telah melayarinya

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>
Salin selepas log masuk

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!