Menyelesaikan Kekaburan Warisan Berbilang dengan Warisan Maya
Dalam pengaturcaraan berorientasikan objek, warisan berbilang boleh membawa kepada konflik yang dikenali sebagai "masalah berlian" apabila kelas mewarisi daripada berbilang kelas induk yang mempunyai kelas asas biasa. Ini boleh mengakibatkan kekaburan dalam menyelesaikan pelaksanaan kaedah yang diwarisi untuk dipanggil.
Warisan maya ialah ciri bahasa yang direka khusus untuk menangani isu ini. Dengan mengisytiharkan kelas asas sebagai awam maya, anda menunjukkan bahawa terdapat hanya satu contoh kelas asas itu, tanpa mengira bilangan laluan yang diwarisi.
Untuk menggambarkan ini, pertimbangkan kod berikut:
class A { public: void eat() { cout << "A"; } }; class B : virtual public A { public: void eat() { cout << "B"; } }; class C : virtual public A { public: void eat() { cout << "C"; } }; class D : public B, C { public: void eat() { cout << "D"; } }; int main() { A *a = new D(); a->eat(); }
Dalam contoh ini, kelas D mewarisi daripada kedua-dua B dan C, yang seterusnya mewarisi daripada kelas asas biasa A. Tanpa maya warisan, akan ada dua laluan dari D ke A:
D -> B -> A D -> C -> A
Memanggil a->eat() akan mengakibatkan kekaburan kerana pengkompil tidak dapat menentukan laluan yang harus diikuti. Walau bagaimanapun, dengan pewarisan maya, perkara berikut berlaku:
Oleh itu, apabila a->eat() dipanggil, kaedah daripada kelas asas kongsi A digunakan, menghasilkan output "A." Ini dicapai kerana warisan maya memastikan bahawa hanya terdapat satu contoh kelas asas, menghapuskan kekaburan dalam panggilan kaedah.
Atas ialah kandungan terperinci Bagaimanakah Warisan Maya Menyelesaikan Masalah Kekaburan Warisan Berbilang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!