Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

Model Warisan C++: Ganda, Multilevel, Hierarkis

Model Warisan C++: Ganda, Multilevel, Hierarkis

Dalam tutorial ini, kita menjelajahi pola warisan C++—ganda, multilevel, dan hierarkis—dengan contoh kode praktis.

Warisan adalah fitur dasar dari pemrograman berorientasi objek. Ini memungkinkan pengembang untuk membuat kelas baru yang mewarisi properti dan perilaku dari yang sudah ada.

Di bawah ini kita memeriksa tiga model warisan utama yang tersedia dalam C++.


Warisan Multilevel C++

Dalam hierarki multilevel, sebuah kelas diturunkan dari kelas turunan lainnya. Rantai berlanjut sampai mencapai kelas dasar.

 class A { // Implementasi kelas dasar }; class B : public A { // B mewarisi dari A }; class C : public B { // C mewarisi dari B }; 

Di sini, B mewarisi dari A, dan C mewarisi dari B, membentuk rantai warisan vertikal.

Contoh 1: Warisan Multilevel dalam C++

 #include <iostream> using namespace std; class A { public: void display() { cout << "Konten kelas dasar." << endl; } }; class B : public A {}; class C : public B {}; int main() { C obj; obj.display(); return 0; }  

Output

Konten kelas dasar.

Program ini menunjukkan bahwa objek dari C dapat memanggil display() yang didefinisikan di kelas dasar akhir A karena tidak ada implementasi penggantian yang ada di B atau C. Kompiler menyelesaikan panggilan dengan mencari rantai warisan dari kelas turunan paling akhir ke atas.


Warisan Ganda C++

C++ memungkinkan sebuah kelas untuk mewarisi dari lebih dari satu kelas dasar. Misalnya, sebuah Bat dapat diturunkan dari baik Mammal dan WingedAnimal karena seekor kelelawar sekaligus adalah mamalia dan makhluk bersayap.

Model Warisan C++: Ganda, Multilevel, Hierarkis

Contoh 2: Warisan Ganda dalam C++

 #include <iostream> using namespace std; class Mammal { public: Mammal() { cout << "Mamalia dapat melahirkan langsung." << endl; } }; class WingedAnimal { public: WingedAnimal() { cout << "Makhluk bersayap dapat berkibar." << endl; } }; class Bat : public Mammal, public WingedAnimal {}; int main() { Bat b1; return 0; }  

Output

Mamalia dapat melahirkan langsung. Makhluk bersayap dapat berkibar.

Mengatasi Ambiguitas dalam Warisan Ganda

Ketika dua kelas dasar menyediakan fungsi dengan nama yang sama, kompiler tidak dapat memutuskan mana yang akan dipanggil, yang mengakibatkan kesalahan ambiguitas.

 class Base1 { public: void someFunction() { /* ... */ } }; class Base2 { public: void someFunction() { /* ... */ } }; class Derived : public Base1, public Base2 {}; int main() { Derived obj; // obj.someFunction(); // Kesalahan: ambigu }  

Gunakan operator resolusi cakupan untuk menentukan fungsi kelas dasar yang diinginkan:

 int main() { Derived obj; obj.Base1::someFunction(); // Memanggil implementasi Base1 obj.Base2::someFunction(); // Memanggil implementasi Base2 } 

Warisan Hierarkis C++

Dalam warisan hierarkis, beberapa kelas turunan mewarisi dari satu kelas dasar. Semua atribut dan perilaku umum dikapsulasi di kelas dasar, sementara setiap kelas turunan dapat menambahkan spesialisasi miliknya sendiri.

Contohnya meliputi Physics, Chemistry, dan Biology diturunkan dari Science; dan Dog, Cat, Horse diturunkan dari Animal.

Sintaks Warisan Hierarkis

 class BaseClass { // Konten kelas dasar }; class DerivedOne : public BaseClass { // Anggota tambahan }; class DerivedTwo : public BaseClass { // Anggota tambahan }; class DerivedThree : public BaseClass { // Anggota tambahan }; 

Contoh 3: Warisan Hierarkis dalam C++

 // Program C++ menunjukkan warisan hierarkis #include <iostream> using namespace std; // Kelas dasar class Animal { public: void info() { cout << "Saya adalah seekor hewan." << endl; } }; // Kelas turunan 1 class Dog : public Animal { public: void bark() { cout << "Saya adalah seekor Anjing. Guk guk." << endl; } }; // Kelas turunan 2 class Cat : public Animal { public: void meow() { cout << "Saya adalah seekor Kucing. Meong." << endl; } }; int main() { // Instance Anjing Dog dog1; cout << "Kelas Anjing:" << endl; dog1.info(); dog1.bark(); // Instance Kucing Cat cat1; cout << "\nKelas Kucing:" << endl; cat1.info(); cat1.meow(); return 0; }  

Output

Kelas Anjing: Saya adalah seekor hewan. Saya adalah seekor Anjing. Guk guk. Kelas Kucing: Saya adalah seekor hewan. Saya adalah seekor Kucing. Meong.

Kedua Dog dan Cat mewarisi metode info() dari Animal, sementara setiap kelas memperkenalkan perilaku spesialisasi miliknya sendiri.


Bahasa C

  1. Kelas dan Objek C#: Fondasi untuk OOP yang Kuat
  2. Menguasai Kelas dan Metode Abstrak C#: Panduan Praktis
  3. Memahami Kelas dan Metode Parsial C#
  4. Menguasai Kelas dan Metode Tersegel di C#—Kapan Menggunakannya, Contoh Jelas, dan Tingkatkan Keamanan serta Performa Kode
  5. Kelas & Objek C++: Panduan Praktis Pemrograman Berorientasi Objek
  6. Menguasai Warisan C++: Public, Protected & Private Dijelaskan
  7. Fungsi Teman dan Kelas Teman C++: Menguasai Kontrol Akses
  8. Struktur vs Kelas C++: Perbedaan Utama, Sintaks, dan Kasus Penggunaan Terbaik
  9. Memahami Kelas Penyimpanan C++: Cakupan, Umur, dan Penggunaan
  10. Panduan Lengkap Tanggal dan Waktu dalam C++