Rumah >pembangunan bahagian belakang >C++ >Untuk Mengatasi atau Tidak Mengganti: Adakah Mengisytiharkan 'maya' Secara Eksplisit Diperlukan Apabila Mengatasi Fungsi Maya dalam C ?

Untuk Mengatasi atau Tidak Mengganti: Adakah Mengisytiharkan 'maya' Secara Eksplisit Diperlukan Apabila Mengatasi Fungsi Maya dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-14 22:04:15248semak imbas

To Override or Not to Override: Is Explicitly Declaring

Mengatasi Fungsi Maya dalam Kelas Terbitan C: Keperluan atau Tidak?

C menyediakan kata kunci "maya" untuk membolehkan tingkah laku polimorfik dalam kelas terbitan . Polimorfisme membenarkan kelas yang berbeza untuk melaksanakan versi berbeza bagi fungsi yang sama. Walau bagaimanapun, terdapat persoalan yang timbul: adakah perlu untuk menentukan "maya" apabila mengatasi fungsi maya dalam kelas terbitan?

Pertimbangkan definisi struct berikut:

struct A {
    virtual void hello() = 0;
};

Ini mentakrifkan abstrak kelas asas A dengan fungsi maya tulen hello(). Sekarang, mari kita periksa dua pendekatan untuk mengatasi fungsi ini dalam kelas B terbitan:

Approach #1:
struct B : public A {
    virtual void hello() { ... }
};
Approach #2:
struct B : public A {
    void hello() { ... }
};

Persoalannya: adakah terdapat perbezaan antara kedua-dua pendekatan ini?

Jawapan:

Jawapannya tidak, tiada perbezaan tingkah laku antara kedua-dua pendekatan ini. Walau bagaimanapun, terdapat perbezaan yang ketara dalam penggunaannya.

  • Pendekatan #1: Secara eksplisit menentukan fungsi yang diganti sebagai "maya." Ini perlu jika anda ingin mengatasi fungsi maya dalam kelas terbitan yang mungkin telah diisytiharkan sebagai maya dalam salah satu kelas asasnya. Dalam kes ini, menggunakan "maya" memastikan bahawa penggantian fungsi dilakukan secara polimorfik.
  • Pendekatan #2: Tidak menyatakan secara eksplisit fungsi yang diganti sebagai "maya." Ini sah apabila fungsi yang diganti sudah diisytiharkan sebagai maya dalam kelas asas. Kata kunci "maya" diwarisi secara tersirat dalam kes ini, menjadikan polimorfik menimpa.

Dalam contoh yang disediakan, fungsi yang diganti sudah diisytiharkan sebagai maya dalam kelas asas A. Oleh itu, kedua-dua pendekatan akan mengakibatkan tingkah laku polimorfik. Pilihan antara dua pendekatan bergantung pada kejelasan dan konsistensi yang anda sukai dalam kod anda.

Atas ialah kandungan terperinci Untuk Mengatasi atau Tidak Mengganti: Adakah Mengisytiharkan 'maya' Secara Eksplisit Diperlukan Apabila Mengatasi Fungsi 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