Warisan Pelbagai, Bertingkat dan Hierarki

Dalam artikel ini, anda akan belajar mengenai model warisan yang berbeza dalam pengaturcaraan C ++: Warisan berganda, bertingkat dan Hierarki dengan contoh.

Warisan adalah salah satu ciri utama bahasa pengaturcaraan berorientasikan objek. Ini membolehkan pembangun perisian memperoleh kelas baru dari kelas yang ada. Kelas yang diturunkan mewarisi ciri kelas asas (kelas yang ada).

Terdapat pelbagai model pewarisan dalam pengaturcaraan C ++.

Warisan Bertingkat C ++

Dalam pengaturcaraan C ++, bukan sahaja anda dapat memperoleh kelas dari kelas asas tetapi anda juga dapat memperoleh kelas dari kelas turunan. Bentuk pusaka ini dikenali sebagai warisan bertingkat.

kelas A (…); kelas B: orang awam A (…); kelas C: awam B (………);

Di sini, kelas B berasal dari kelas asas A dan kelas C berasal dari kelas B yang berasal.

Contoh 1: Warisan bertingkat C ++

 #include using namespace std; class A ( public: void display() ( cout<<"Base class content."; ) ); class B : public A ( ); class C : public B ( ); int main() ( C obj; obj.display(); return 0; )

Pengeluaran

 Kandungan kelas asas.

Dalam program ini, kelas C berasal dari kelas B (yang berasal dari kelas asas A).

Objek obj kelas C didefinisikan dalam main()fungsi.

Apabila display()fungsi dipanggil, display()di kelas A dijalankan. Ini kerana tidak ada display()fungsi di kelas C dan kelas B.

Penyusun pertama mencari display()fungsi di kelas C. Oleh kerana fungsi tersebut tidak ada di sana, ia mencari fungsi di kelas B (kerana C berasal dari B)

Fungsi juga tidak ada di kelas B, jadi penyusun mencarinya di kelas A (kerana B berasal dari A).

Sekiranya display()fungsi wujud dalam C, pengganti display()akan mengalahkan kelas A (kerana fungsi anggota mengesampingkan ).

C ++ Warisan Pelbagai

Dalam pengaturcaraan C ++, kelas boleh diperoleh daripada lebih daripada satu ibu bapa. Contohnya: Kelelawar kelas berasal dari kelas asas Mammal dan WingedAnimal. Masuk akal kerana kelelawar adalah mamalia dan juga haiwan bersayap.

Contoh 2: Warisan Berganda dalam Pengaturcaraan C ++

 #include using namespace std; class Mammal ( public: Mammal() ( cout << "Mammals can give direct birth." << endl; ) ); class WingedAnimal ( public: WingedAnimal() ( cout << "Winged animal can flap." << endl; ) ); class Bat: public Mammal, public WingedAnimal ( ); int main() ( Bat b1; return 0; ) 

Pengeluaran

Mamalia dapat melahirkan secara langsung. Haiwan bersayap boleh mengepakkan.

Kekaburan dalam Warisan Pelbagai

Masalah yang paling jelas dengan pelbagai pewarisan berlaku semasa penggantian fungsi.

Misalkan, dua kelas asas mempunyai fungsi yang sama yang tidak diganti dalam kelas turunan.

Sekiranya anda cuba memanggil fungsi menggunakan objek kelas turunan, penyusun menunjukkan kesalahan. Ini kerana penyusun tidak tahu fungsi mana yang hendak dipanggil. Sebagai contoh,

 class base1 ( public: void someFunction( ) (… .… … . ) ); class base2 ( void someFunction( ) (… .… … . ) ); class derived : public base1, public base2 ( ); int main() ( derived obj; obj.someFunction() // Error! )  

Masalah ini dapat diselesaikan dengan menggunakan fungsi resolusi skop untuk menentukan fungsi mana ke kelas sama ada base1 atau base2

 int main () (obj.base1 :: someFunction (); // Fungsi kelas base1 dipanggil obj.base2 :: someFunction (); // Fungsi kelas base2 dipanggil.)

Warisan Hierarki C ++

Sekiranya lebih daripada satu kelas diwarisi dari kelas asas, ia dikenali sebagai warisan hierarki. Dalam pewarisan hierarki, semua ciri yang biasa terdapat di kelas anak termasuk dalam kelas asas.

Contohnya: Fizik, Kimia, Biologi berasal dari kelas Sains.

Sintaks Warisan Hierarki

 class base_class (…) class first_derived_class: public base_class (…) class second_derived_class: public base_class (…) kelas ketiga_derived_class: public base_class (…)

Artikel menarik...