Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Warisan Maya Menyelesaikan Masalah Berlian Pusaka Berbilang?

Bagaimanakah Warisan Maya Menyelesaikan Masalah Berlian Pusaka Berbilang?

Barbara Streisand
Lepaskan: 2024-12-22 16:55:21
asal
668 orang telah melayarinya

How Does Virtual Inheritance Solve the Multiple Inheritance Diamond Problem?

Cara Warisan Maya Menyelesaikan Kekaburan Warisan Berbilang

Dalam pengaturcaraan berorientasikan objek, warisan berbilang membenarkan kelas terbitan untuk diwarisi daripada berbilang kelas asas . Walau bagaimanapun, ini boleh membawa kepada kekaburan apabila kelas terbitan mewarisi berbilang kaedah dengan tandatangan yang sama daripada kelas asasnya. Ini dikenali sebagai "masalah berlian."

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();
}
Salin selepas log masuk

Dalam contoh ini, kelas D mewarisi daripada kedua-dua kelas B dan kelas C, yang kedua-duanya mewarisi daripada kelas A. Apabila objek jenis D dicipta dan diberikan kepada penunjuk jenis A, pengkompil perlu menentukan pelaksanaan kaedah eat() yang hendak dipanggil. Tanpa warisan maya, ini akan membawa kepada kekaburan, kerana pengkompil tidak dapat menentukan laluan mana yang hendak diambil.

Warisan maya menyelesaikan kekaburan ini dengan mencipta hanya satu tika kelas asas dalam kelas terbitan. Dalam kes ini, hanya terdapat satu contoh kelas A dalam kelas D, walaupun ia mewarisi kedua-dua kelas B dan kelas C. Ini bermakna tiada lagi kesamaran semasa memanggil kaedah eat(), kerana hanya terdapat satu pelaksanaan kaedah.

Hierarki kelas yang terhasil akan kelihatan seperti ini:

    A
   / \
  B   C
  \ /
   D
Salin selepas log masuk

Dengan pewarisan maya, saiz objek kelas D ialah meningkat, kerana ia kini menyimpan dua penunjuk vtable (satu untuk kelas B dan satu untuk kelas C). Walau bagaimanapun, pertukaran ini perlu untuk menyelesaikan kekaburan yang mungkin berlaku.

Atas ialah kandungan terperinci Bagaimanakah Warisan Maya Menyelesaikan Masalah Berlian Pusaka Berbilang?. 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