Rumah >pembangunan bahagian belakang >C++ >Adakah Kata Kunci 'maya' Berlebihan Apabila Mengatasi Fungsi Maya dalam Kelas Terbitan C?
Fungsi Maya dalam Kelas Terbitan: Adakah Kata Kunci "maya" Berlebihan?
Dalam konteks pengaturcaraan berorientasikan objek C, fungsi maya memainkan peranan penting dalam melaksanakan polimorfisme. Apabila kelas terbitan mengatasi fungsi maya, ia mencipta pelaksanaan baharu tanpa melanggar gelagat kelas asasnya.
Pertimbangkan definisi struct berikut:
struct A { virtual void hello() = 0; };
Struktur ini mengisytiharkan maya tulen fungsi bernama hello(). Sekarang, mari kita periksa dua pendekatan untuk menggantikan hello() dalam struct terbitan B:
Pendekatan #1 (dengan "maya"):
struct B : public A { virtual void hello() { ... } };
Pendekatan #2 (tanpa "maya"):
struct B : public A { void hello() { ... } };
Pada pandangan pertama, satu-satunya perbezaan antara pendekatan ini ialah kehadiran atau ketiadaan kata kunci "maya" sebelum fungsi hello() yang diganti. Adakah ini membuat sebarang perbezaan fungsi?
Jawapan: Tidak, tiada perbezaan fungsi antara kedua-dua pendekatan ini.
Walaupun menggunakan kata kunci "maya" dalam Pendekatan #1, kedua-dua pendekatan adalah setara dan akan menghasilkan tingkah laku yang sama. Kata kunci "maya" adalah berlebihan dalam kes ini kerana fungsi hello() telah pun diisytiharkan sebagai maya dalam kelas asas A.
Oleh itu, apabila mengatasi fungsi maya dalam kelas terbitan, kata kunci "maya" boleh ditinggalkan tanpa menjejaskan fungsi atau semantik program. Ia hanyalah soal gaya dan keutamaan sama ada mahu menggunakannya atau tidak.
Atas ialah kandungan terperinci Adakah Kata Kunci 'maya' Berlebihan Apabila Mengatasi Fungsi Maya dalam Kelas Terbitan C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!