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.
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!